Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
SEC Form 13F holdings as they could have been known on a given date (stdio).
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
SEC_USER_AGENT, EDGAR13F_AGENT_MODE, EDGAR13F_CACHE_DIRต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"edgar13f": {
"command": "uvx",
"args": [
"edgar13f-mcp"
],
"env": {
"SEC_USER_AGENT": "ใส่ค่าของคุณ",
"EDGAR13F_AGENT_MODE": "ใส่ค่าของคุณ",
"EDGAR13F_CACHE_DIR": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add edgar13f --env SEC_USER_AGENT='ใส่ค่าของคุณ' --env EDGAR13F_AGENT_MODE='ใส่ค่าของคุณ' --env EDGAR13F_CACHE_DIR='ใส่ค่าของคุณ' -- uvx edgar13f-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"edgar13f": {
"command": "uvx",
"args": [
"edgar13f-mcp"
],
"env": {
"SEC_USER_AGENT": "ใส่ค่าของคุณ",
"EDGAR13F_AGENT_MODE": "ใส่ค่าของคุณ",
"EDGAR13F_CACHE_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"edgar13f": {
"type": "stdio",
"command": "uvx",
"args": [
"edgar13f-mcp"
],
"env": {
"SEC_USER_AGENT": "ใส่ค่าของคุณ",
"EDGAR13F_AGENT_MODE": "ใส่ค่าของคุณ",
"EDGAR13F_CACHE_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
EDGAR13F_AGENT_MODE envEDGAR13F_CACHE_DIR envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub Serios16 ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: SEC_USER_AGENT
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.2.2) เข้า registry 15 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Georgia MCP
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
An MCP server for Georgian public data, read from the organizations that publish it.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
An MCP server that answers questions about SEC Form 13F holdings as they could have been known on a given date. It comes with an evaluation that was frozen before the server was written.
Institutional managers with US$100m or more in 13F securities file Form 13F every quarter, up to 45 days after the quarter ends. Many of them later amend the report. A restatement replaces the whole report. A new-holdings amendment adds rows to it. So "what did manager X hold at 2024-12-31?" has different correct answers on different days: nothing before the filing date, then the original report, and later the amended one.
A tool that always returns the latest version leaks the future into backtests, research notes and agent answers. This server takes an as_of date with every call and follows two rules (full text in contracts/CONTRACTS.md):
as_of only if its EDGAR filing date is on or before as_of. Nothing filed later affects the answer: not the rows, the citations, the filing list, or which filing counts as "latest".Python 3.11, with the official MCP Python SDK 2.x. The server speaks MCP over stdio only.
One command (needs uv). The package is edgar13f-mcp on PyPI, uploaded by this repository's release workflow with trusted publishing, and listed in the official MCP Registry as io.github.Serios16/edgar13f-mcp:
export SEC_USER_AGENT="Your Name your.email@example.com" # required by SEC fair access
uvx --python 3.11 edgar13f-mcp # pin a release: edgar13f-mcp@1.2.2
For an MCP client such as Claude Desktop:
{"mcpServers": {"edgar13f": {
"command": "uvx", "args": ["--python", "3.11", "edgar13f-mcp"], "env": {"SEC_USER_AGENT": "Your Name your.email@example.com"}}}}
Any commit or tag also runs straight from GitHub: uvx --python 3.11 --from git+https://github.com/Serios16/edgar13f-mcp@v1.2.2 edgar13f-mcp. The older command name edgar13f-server still works. Both names are tested on the built wheel by tests/tools/install_smoke.sh (empty uv cache, MCP handshake; output in reports/artifacts/install_smoke_stage6.txt). From a clone instead:
python3.11 -m venv .venv && . .venv/bin/activate
pip install -e . export SEC_USER_AGENT="Your Name your.email@example.com" # required by SEC fair access python -m edgar13f.server # or: edgar13f-server
Environment variables:
SEC_USER_AGENT: the User-Agent sent to sec.gov. It is required; without it the server does not contact sec.gov.EDGAR13F_CACHE_DIR: the on-disk cache. The default is $XDG_CACHE_HOME/edgar13f (or ~/.cache/edgar13f), then a private per-user temp dir. The server writes nowhere else.EDGAR13F_REDACT: set to exactly off to return the rows that are redacted by default (see Limits). Any other value, or none, keeps redaction on.EDGAR13F_AGENT_MODE: set to exactly on to cap unnarrowed holdings and diff answers at the 50 largest positions (see Agent use). Unset, every v1 call answers byte for byte as in v1.1.0.EDGAR13F_FIXTURE_DIR: serve recorded fixtures instead of EDGAR (used by the tests; refused together with EDGAR13F_REDACT=off).SEC access follows the fair-access policy. Across processes that share a cache dir, request starts are spaced at least 0.25 s apart (under 5 per second). 403/429/5xx responses and HTML error pages trigger exponential backoff. Responses are cached on disk.
| Tool | Returns |
|---|---|
find_manager(name, as_of) | CIK candidates whose current or former EDGAR name contains name, managers with 13F filings first. entity_name is EDGAR's current name (not point-in-time); with as_of, has_13f_filings counts only 13F filings dated on or before it. |
list_13f_filings(cik, as_of[, period]) | Every 13F-HR, 13F-HR/A, 13F-NT and 13F-NT/A filed by the manager on or before as_of (only those for period if given), with period, amendment number and type, report type, manager name and an EDGAR link. |
get_holdings_as_of(cik, period, as_of, cusip, max_positions) | The effective holdings for one quarter as known on as_of, row by row as filed (no merging or rescaling). It cites the base filing and every applied amendment. |
diff_holdings(cik, period_a, period_b, as_of, cusip[, max_positions]) | Position changes between two quarters, both resolved on the same as_of, keyed by (CUSIP, put/call, SH/PRN): added, removed, increased, decreased or unchanged. |
find_manager, period, issuer and max_positions come from Addendum A (additive: a call that uses none of them gets exactly the v1.1.0 answer).
Every response is a JSON object with the disclaimer *"13F reports long positions only; data may lag the period end by up to 45 days."* When the server cannot answer, it returns a normal result with status: "declined" and one of six reasons: unknown_cik, not_yet_filed, notice_only, invalid_period, invalid_argument, unsupported_request.
The extensions are meant for LLM agents, which usually start from a name and cannot read a 40 MB answer. A typical sequence:
// 1. name -> CIK (managers that have filed Form 13F come first)
{"tool": "find_manager", "arguments": {"name": "berkshire hathaway", "as_of": "2025-08-27"}} // 2. which filings make up one quarter, as of a date {"tool": "list_13f_filings", "arguments": {"cik": "1067983", "as_of": "2025-08-27", "period": "2025-03-31"}} // 3. one issuer only; the answer adds matched_cusips {"tool": "get_holdings_as_of", "arguments": {"cik": "1067983", "period": "2025-03-31", "as_of": "2025-08-27", "issuer": "apple"}} // 4. the 10 largest positions; the answer adds total_positions, truncated and order {"tool": "get_holdings_as_of", "arguments": {"cik": "1067983", "period": "2025-03-31", "as_of": "2025-08-27", "max_positions": 10}} // 5. the 20 largest changes by |value_delta| {"tool": "diff_holdings", "arguments": {"cik": "1067983", "period_a": "2024-12-31", "period_b": "2025-03-31", "as_of": "2025-08-27", "max_positions": 20}}
issuer (2-100 characters) keeps rows whose issuer name contains it, ignoring case and runs of whitespace; it combines with cusip as AND.max_positions (1-200) ranks positions, i.e. (CUSIP, put/call, SH/PRN) groups, by summed value (holdings) or by |value_delta| (diff), and returns the top ones with all their rows. A position is never split, so a manager that files many rows per position can still return many rows; use issuer or cusip for one security.accession_number, source_accessions, filing_date) and point-in-time behaviour are unchanged, and redaction happens before any filter.find_manager matches every current and former EDGAR name, returns EDGAR's current name, and is therefore not point-in-time for names. Its first call on an empty cache reads EDGAR's quarterly form indexes since 1993 (about a minute, once per cache directory); later calls take milliseconds.With EDGAR13F_AGENT_MODE=on, a get_holdings_as_of or diff_holdings call that has none of cusip, issuer or max_positions is answered as if max_positions were 50, and the answer adds auto_limited: true. Every other call is unaffected. MCP client config:
{"mcpServers": {"edgar13f": {
"command": "uvx", "args": ["--python", "3.11", "edgar13f-mcp"], "env": {"SEC_USER_AGENT": "Your Name your.email@example.com", "EDGAR13F_AGENT_MODE": "on"}}}}
position_type other than "long" is declined.as_of.ok with no rows. Redaction applies to holdings rows; find_manager returns entity names unfiltered (ruling N1). To switch redaction off, set EDGAR13F_REDACT=off (exactly off); rows read that way are cached in a separate directory and never served once redaction is back on. See CLAUDE.md rule 2 and ruling D2 in REGISTER.md.contracts/PREREG_COMMITMENT.md holds the SHA-256 of that repository's manifest and of the contract files copied here. Everything will be published after the final stage so the hash can be checked.find_manager(as_of)) and a *no-op* control;tests/unit/test_restatement.py);tests/tools/unprivileged_probe.sh).tests/tools/datasets_crosscheck.py compares answers for randomly sampled (cik, period, as_of) triples against the SEC Form 13F Data Sets. The server never reads the data sets.ตัดมาแค่ช่วงต้น อ่านต่อใน repo