DataSinking
Server Details
Full-text financial reports (US, China, Japan, Korea, Taiwan, UK) as clean Markdown for RAG agents.
- Status
- Healthy
- Uptime
- 36.8% over 24 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
- Repository
- heubme2020/datasinking
- GitHub Stars
- 0
TDQS
Scored across 6 tools
Each tool targets a distinct level of the data hierarchy (exchange, stock, report, section, body text). The get_report vs get_section pair is the only potential overlap, and the descriptions explicitly differentiate them by cost/use-case with clear guidance on when to use each.
All six tools follow a strict verb_noun pattern (get_report, get_section, list_exchanges, list_reports, list_sections, list_stocks), with two verbs used consistently: get_ for single-item retrieval and list_ for enumeration.
Six tools is well-scoped for a read-only financial disclosure server, covering discovery, navigation, and retrieval without redundancy. Every tool earns its place and the count supports the described RAG workflow.
The read lifecycle is well covered from exchange discovery down to block-level citation. The main gap is the absence of any keyword/text search tool across reports or companies, which is a common need for a RAG-oriented server, though the hierarchy lets agents work around it.
Available Tools
6 toolsget_reportAInspect
Fetch one report's full text (metadata + Markdown body). The source field names the official disclosure platform; keep that attribution when you cite it. Expensive in tokens — prefer get_section when you only need one chapter. Content is annotated with block markers (<!-- ds:block:N -->) so you can cite a specific paragraph or table.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | Report id, from list_reports items[].id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does well: it discloses the token cost ('Expensive in tokens'), the exact return composition, the block-marker format for citing paragraphs, and an attribution obligation tied to the `source` field. It stops short of covering error behavior (e.g. invalid document_id) or any truncation/length limits, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what the tool does, then routing guidance, then citation mechanics. Every sentence carries distinct information with no restatement of the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the response shape (metadata + Markdown body) and the embedded block-marker structure an agent needs in order to cite correctly. For a single-parameter, single-resource fetch tool, nothing required for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single `document_id` parameter, which already documents that the id comes from list_reports items[].id. The description adds no syntax, format, or constraint detail beyond that, so the schema does the heavy lifting — the baseline 3 when coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch one report's full text') and enumerates the payload ('metadata + Markdown body'). It also distinguishes itself from the sibling get_section by scope (full report vs one chapter), so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (get_section) and the condition that selects it ('when you only need one chapter'), framed against the cost of this tool. That is the exact when/when-not routing an agent needs in this sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectionAInspect
Fetch only one section of a report by keyword — much cheaper than get_report, best for RAG. Content is annotated with block markers (<!-- ds:block:N -->) so you can cite a specific paragraph or table.
| Name | Required | Description | Default |
|---|---|---|---|
| section | Yes | Heading keyword. Matches the report's own headings, and also understands cross-market concepts — MD&A / financial statements / notes / audit report / risk / governance (or their Chinese/Japanese/Korean equivalents) resolve to the right section in any market. Otherwise pass a heading in the report's language (A-share: 管理层讨论与分析 / 财务报告; English filings: "MD&A" / "financial statements" / "notes"). If nothing matches, the API returns 404 with the real headings — retry with one of those, or call list_sections first. | |
| document_id | Yes | Report id, from list_reports items[].id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden; it discloses the output format ('annotated with block markers `<!-- ds:block:N -->`') and the cost/scope tradeoff versus get_report, which is genuinely useful. It does not mention auth requirements, rate limits, or the 404 failure mode (that detail lives in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences; the scope/cost contrast with get_report is front-loaded and the block-marker detail follows. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does the heavy lifting by explaining the returned content's block-marker structure and the cost rationale. It is nearly complete, missing only return-volume/auth notes, but nothing critical for correct invocation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters extensively, including the cross-market keyword resolution and 404 retry guidance. The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and resource ('one section of a report'), scopes it with 'by keyword', and explicitly contrasts with the sibling get_report ('much cheaper than get_report'). An agent can distinguish it from get_report and list_sections without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to prefer this over get_report ('much cheaper', 'best for RAG'), which is the key routing decision. It stops short of explicit when-not guidance or naming list_sections here as the alternative for discovery, though the schema's section description covers that fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_exchangesInspect
List the exchanges DataSinking covers. Returns exchange codes (bj / br / by / jpx / koe / ksc / lk / lse / nasdaq / np / nyse / otc / pk / rs / sse / szse / tpex / twse) with the number of reports available per exchange. Call this first to discover coverage. Sources: US = SEC EDGAR, A-shares = cninfo.com.cn, Japan = EDINET, Korea = DART, Taiwan = MOPS, UK = FCA NSM, Nepal = NEPSE, Brazil = CVM, Belarus = ЕПФР, Sri Lanka = CSE, Pakistan = PSX, Serbia = SEC register.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_reportsInspect
List a company's reports — metadata only (id, title, period), no body text. Each item carries a source field naming the official disclosure platform; keep that attribution when you cite it. Look up by symbol (FMP-style, e.g. AAPL / 600519.SS / NABIL.NP) or by exchange + stock_code (from list_stocks) for markets whose codes aren't ticker-shaped (e.g. Brazil CNPJ, Sri Lanka 'AAA.N0000').
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of reports to return (default 10). | |
| symbol | No | FMP-style symbol, e.g. AAPL / 600519.SS / 7203.T / 005930.KS / 2330.TW / NABIL.NP | |
| doc_type | No | Report type to filter on. Defaults to annual. | annual |
| exchange | No | Exchange code (from list_exchanges). Use with stock_code when the code isn't ticker-shaped. | |
| stock_code | No | Exact stock_code from list_stocks. Use with exchange. |
list_sectionsAInspect
List every section of a report with its size, before you decide what to pull. Returns sections (titles, in order) plus section_details — same order, one entry per section with title, has_tables, chars and estimated_tokens. Use estimated_tokens to avoid pulling a chapter that would blow your context, and has_tables to know whether the chapter needs special handling (tables are the part RAG pipelines usually get wrong). Then call get_section with a heading keyword — the headings are in the report's own language.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | Report id, from list_reports items[].id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does meaningful work: it discloses the exact return shape (`sections` and `section_details` with title/has_tables/chars/estimated_tokens) and explains how to use estimated_tokens and has_tables. It does not state permissions or that this is a read-only, non-mutating operation, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and the payoff (sizes before pulling), then describes the return shape and the follow-up. Slightly dense with the parenthetical aside about RAG pipelines, but nearly every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly compensates by enumerating the returned fields and their meaning, and it links to the next tool in the workflow. Nothing needed to invoke or interpret this call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one parameter, so the schema already documents document_id fully (including its provenance from list_reports). The description adds no syntax or format detail for it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (sections of a report) plus the scope (with size, in order). It is clearly distinguishable from get_section, which pulls a single chapter, and from list_reports, which enumerates reports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the call as a prerequisite step ('before you decide what to pull') and routes the agent to the follow-up tool: 'Then call get_section with a heading keyword.' The when-to-use and the alternative are both named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stocksInspect
List the stocks on one exchange, including the report count per company.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Return only the first N companies (default 20) to keep the response short. | |
| exchange | Yes | Exchange code, e.g. bj / br / by / jpx / koe / ksc / lk / lse / nasdaq / np / nyse / otc / pk / rs / sse / szse / tpex / twse |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
list_stocks1 field changed- changed
Input schema / properties / exchange / descriptionPrevious value: -"Exchange code, e.g. bj / br / by / jpx / koe / ksc / lk / lse / nasdaq / np / nyse / otc / sse / szse / tpex / twse"New value: +"Exchange code, e.g. bj / br / by / jpx / koe / ksc / lk / lse / nasdaq / np / nyse / otc / pk / rs / sse / szse / tpex / twse"
2 tool updates
- Changed
list_reports4 fields changed- added
Input schema / properties / exchangeAdded value: +{ + "description": "Exchange code (from list_exchanges). Use with stock_code when the code isn't ticker-shaped.", + "type": "string" +} - added
Input schema / properties / stock_codeAdded value: +{ + "description": "Exact stock_code from list_stocks. Use with exchange.", + "type": "string" +} - changed
Input schema / properties / symbol / descriptionPrevious value: -"FMP-style symbol, e.g. AAPL / 600519.SS / 7203.T / 005930.KS / 2330.TW"New value: +"FMP-style symbol, e.g. AAPL / 600519.SS / 7203.T / 005930.KS / 2330.TW / NABIL.NP" - removed
Input schema / requiredRemoved value: -[ - "symbol" -]
- Changed
list_stocks1 field changed- changed
Input schema / properties / exchange / descriptionPrevious value: -"Exchange code, e.g. nyse / nasdaq / cboe / sse / szse / bj / jpx / ksc / koe / knx / twse / tpex / lse"New value: +"Exchange code, e.g. bj / br / by / jpx / koe / ksc / lk / lse / nasdaq / np / nyse / otc / sse / szse / tpex / twse"
1 tool update
- Changed
list_stocks1 field changed- changed
Input schema / properties / exchange / descriptionPrevious value: -"Exchange code, e.g. nyse / nasdaq / cboe / sse / szse / bj / jpx / ksc / koe / knx / twse / tpex"New value: +"Exchange code, e.g. nyse / nasdaq / cboe / sse / szse / bj / jpx / ksc / koe / knx / twse / tpex / lse"
6 tool updates
- First observed
get_report - First observed
get_section - First observed
list_exchanges - First observed
list_reports - First observed
list_sections - First observed
list_stocks
Publisher details
- Operator
- DataSinking
- Operator website
- https://datasink.ing
- Vendor relationship
- First-party
- Documentation
- https://github.com/heubme2020/datasinking · Publisher source
- Restrictions
- Requires an API key (free tier available, 3 req/s; $31/year paid tier for higher limits). No regional or admin restrictions.
Related MCP Connectors
Korean (DART/KIND) and US SEC filings with AI summaries, direction labels and market reaction.
Grounded financial research for agents: filings, transcripts, news across US and Asia markets.
SEC EDGAR financials, insider trading, and economic data for AI agents. US GAAP + IFRS.
Primary-source SEC filing intelligence and financial/disclosure reconciliation for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables natural language queries over financial reports, with multimodal retrieval across text, tables, and charts via an agentic RAG system.MIT
- FlicenseAqualityCmaintenanceEnables AI agents to analyze Korean corporate filings from DART with token-efficient footnote parsing, financial anomaly detection, and historical stock price correlation.4-
- AlicenseAqualityCmaintenanceEnables AI assistants to analyze Korean financial disclosures (DART) with insider trading signals, accounting risk scores, Buffett-style quality checklists, and automatic conversion of HWP/PDF attachments to markdown.15345 npm3MIT
- AlicenseNot gradedqualityCmaintenanceFinancial data and research MCP for AI agents: filings with full-text and fact search, statements as reported, earnings, insider and institutional ownership, corporate events, executives, analyst data, company discovery and research signals for US, China and Japan equities. Every figure traced to its filing. Browser sign-in.8MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.