primary-sources-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@primary-sources-mcpWhat's the World Bank GDP for Japan?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
primary-sources-mcp
Free primary-source APIs for AI agents. SEC EDGAR, World Bank, GDELT, DATA.GOV.HK, HKMA, the official MCP Registry, UK Companies House, FRED and Jina Reader — as MCP tools, each result wrapped in a
{ source, retrievedAt, data }provenance envelope.
Zero runtime dependencies. Node >= 20. 12 tools, 10 of them keyless.
Quick start
{
"mcp": {
"primary-sources": {
"type": "local",
"command": ["npx", "-y", "@simonmak-ascent/primary-sources-mcp"],
"enabled": true,
"timeout": 120000
}
}
}Hosted (Streamable HTTP): https://primary-sources-mcp.vercel.app/mcp.
Related MCP server: Agent Signals MCP
Tools
Tool | Source | Key |
| SEC EDGAR full-text search (US filings) | none |
| SEC EDGAR registrant + recent filings | none |
| World Bank development indicators | none |
| GDELT DOC 2.0 global news | none |
| DATA.GOV.HK catalogue search | none |
| DATA.GOV.HK filter API | none |
| Hong Kong Monetary Authority public API | none |
| Official MCP Registry | none |
| Jina Reader (URL → markdown) | none (free tier) |
| UK Companies House search |
|
| UK Companies House record |
|
| St. Louis Fed FRED series |
|
Environment
Variable | Required | Purpose |
| no | User-Agent contact string (politeness for SEC/GDELT). |
| for 2 tools | Free key from Companies House. |
| for 1 tool | Free key from the St. Louis Fed. |
Provenance
Every data tool returns text of the form:
{ "source": "World Bank Indicators", "retrievedAt": "2026-10-02T16:00:00.000Z", "data": { } }so an agent can cite the origin and time of every fact.
Development
npm install
npm run typecheck
npm test
npm run build
node dist/index.js # stdio MCP serverLicense
MIT — see LICENSE.
Available Tools
12 toolscompanies_house_companyA
Fetch one UK company record by number (requires COMPANIES_HOUSE_API_KEY).
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the COMPANIES_HOUSE_API_KEY auth requirement, which is real added value. However, it says nothing about error behavior for an unknown number, rate limits, or what the record contains, so a 3 is appropriate.
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?
One front-loaded sentence, no filler, the key constraint ('one', 'by number') precedes the parenthetical auth note.
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?
For a single-parameter lookup with no output schema, the description covers purpose and the auth requirement adequately. Minor gaps remain around expected return shape and invalid-number handling, but nothing critical for invocation.
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 0% on a single required parameter, so the schema alone says nothing. The phrase 'by number' clarifies that the parameter is the company number identifier, which is partial compensation, but no format guidance (e.g., 8-character CRN) is given.
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), resource (UK company record), and a scope qualifier (one, by number) that implicitly separates it from the sibling companies_house_search. It does not explicitly name the search sibling, so it stops short of a 5.
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?
'by number' implies you must already hold a company number, which is useful, but the description never states when to use this over companies_house_search (e.g., when you know the number vs. when you need to look one up). Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
companies_house_searchC
Search UK Companies House (requires COMPANIES_HOUSE_API_KEY). Free key.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
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. It usefully discloses that a COMPANIES_HOUSE_API_KEY is required, which is genuine operational context, but says nothing about rate limits, result format, pagination, or what the search matches against.
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?
One compact sentence with the resource and prerequisite front-loaded and no filler. It is appropriately sized, though its brevity is partly under-specification rather than pure economy.
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?
For a tool with an undocumented required parameter, no output schema, no annotations, and a near-identical sibling, the description omits too much: query semantics, expected output, and when to prefer this over companies_house_company. Coverage across all structured fields is effectively 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?
The single 'query' parameter has 0% schema description coverage, so the description is the only place semantics could be documented - yet it says nothing about whether query accepts a company name, number, keyword, or partial string. The schema/description gap is left unfilled.
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?
The description states a specific verb and resource: 'Search UK Companies House.' An agent understands the domain, but it does not differentiate from the sibling companies_house_company (which presumably looks up a specific company by number), leaving the search-vs-lookup choice implicit.
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?
No guidance on when to use this tool versus companies_house_company, sec_edgar_company, or other search siblings. The only contextual note is an API-key prerequisite, which is configuration, not usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fred_seriesC
FRED economic series observations (requires FRED_API_KEY). Free key.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| seriesId | Yes | e.g. FEDFUNDS, DGS10, CPIAUCSL |
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 discloses only the auth prerequisite ('requires FRED_API_KEY'). It says nothing about rate limits, pagination, data freshness, or error behavior for what is a read of an external API.
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?
It is a single tight sentence with zero waste and the auth caveat is front-loaded, but brevity here shades into under-specification rather than efficient structure.
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 annotations, no output schema, and one of two parameters undocumented, the description is too thin for an external-data-fetch tool. An agent can call it but cannot predict return shape, pagination, or limits.
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 50%: seriesId has an example list in the schema while 'limit' is undocumented in both places. The description adds no meaning to either parameter and does not compensate for the coverage gap.
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?
The description states the resource (FRED economic series observations), which tells an agent it returns time-series data, but there is no verb and no differentiation from a similar sibling such as world_bank_indicator. It is identifiable but generic.
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?
The only guidance is the API-key requirement. There is no when-to-use, no when-not-to-use, and no routing against siblings like world_bank_indicator or hkma that also serve economic data. The agent must infer everything about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_newsC
GDELT global news article search/trends (free, no key). Great for news volume and cross-outlet coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| query | Yes | ||
| timespan | No | e.g. 24h, 7d, 1m | |
| maxrecords | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses "free, no key" (no auth required), but says nothing about rate limits, result format, pagination, or how the two modes behave differently — which is the key operational trait of this tool. One useful disclosure against many gaps.
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 fragments, front-loaded with the tool's identity and the key practical fact (free, no key). Nothing is wasted, though the brevity is partly the same under-specification penalized elsewhere.
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?
For a 4-parameter tool with no annotations, no output schema, and a critical mode enum left unexplained, the description is too thin. An agent cannot tell from this text which mode to pick or what a call will return, so it is not complete enough to invoke correctly without opening the schema.
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 only 25% (timespan alone is documented in the schema). The description adds no parameter meaning at all, leaving query, mode (including its artlist/timelinevol enum choice), and maxrecords unexplained in both schema and description. It fails to compensate for the coverage gap.
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?
The description names a specific verb+resource ("global news article search/trends") tied to the GDELT dataset, which an agent can recognize. It is clearly differentiable from the finance/registry siblings (sec_edgar, world_bank, hkma), though it never explicitly contrasts itself with anything. It stops just short of pinpointing scope, so a 4 rather than a 5.
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?
"Great for news volume and cross-outlet coverage" implies the intended use case, giving the agent a rough sense of when it fits. However, there is no explicit when-not guidance, no mention of the artlist vs timelinevol choice, and no named alternative. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hkmaC
Hong Kong Monetary Authority public API (free, no key). e.g. path market-data-and-statistics/daily-monetary-statistics/daily-figures-interbank-liquidity.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| params | No |
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 usefully discloses that no API key is required, but says nothing about rate limits, error behavior, pagination, or what the response contains for a data-retrieval tool.
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 short sentences, front-loaded with the resource identity, no filler. Efficient even if under-specified.
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 annotations, no output schema, 0% schema coverage, and a nested params object, the description omits too much: what data is returned, how to build a valid path, and what params accepts. An agent would have to guess at invocation details.
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 0% and there are two parameters, including a nested free-form params object. The single example path shows the path format but the description never explains the params object at all, so it only partially compensates for the coverage gap.
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?
The description identifies the resource (Hong Kong Monetary Authority public API) and gives an example path, so the agent can infer it retrieves HKMA data. But no verb or scope statement ('fetch statistics', 'search datasets'), and it does nothing to distinguish itself from siblings like world_bank_indicator, fred_series, or hk_open_data_search.
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?
It notes the API is 'free, no key', which is context, but gives no when-to-use guidance, no conditions, and no routing to alternative data-source tools such as fred_series or world_bank_indicator. The example path hints at call form but not at when this tool should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hk_open_data_filterB
Query a DATA.GOV.HK dataset resource with filters (free, no key). filters is an array of arrays [column,"op",[values]].
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | ||
| section | No | ||
| resource | Yes | Dataset resource URL from hk_open_data_search |
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. '(free, no key)' helpfully signals no auth requirement, but there is no disclosure of return format, rate limits, pagination, or what happens on invalid filters/operators. For an unannotated query tool this is a significant 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?
Two tight sentences, front-loading the core purpose and the free/no-key fact before the filter syntax. Little waste, though the filter syntax could be integrated more cleanly.
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 annotations, no output schema, and two of three parameters undocumented in the schema, the description should do more. It omits the 'section' parameter meaning and gives no sense of the response shape, leaving real gaps for correct invocation.
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 only 33% (just 'resource'), so the description must compensate, and it does by specifying the filter syntax as [column,"op",[values]] — valuable beyond the schema. But the 'section' parameter is left entirely undocumented in both schema and description.
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 ('Query') and resource ('DATA.GOV.HK dataset resource'), and names the filtering capability directly. It is distinguishable from the sibling hk_open_data_search via the 'resource' parameter's reference, but sibling differentiation is only implicit.
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?
Provides the useful fact '(free, no key)', implying no authentication setup is needed, and implicitly points at hk_open_data_search by documenting that 'resource' is a 'Dataset resource URL from hk_open_data_search'. However, it never explicitly states when to use this versus the search sibling or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hk_open_data_searchC
Search the Hong Kong government open-data catalogue DATA.GOV.HK (free, no key).
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose meaningful operational context ('free, no key' — i.e., no authentication required), but says nothing about result limits, pagination, rate limits, or output shape.
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?
A single front-loaded sentence with zero filler — the scope and the free/no-key fact come first. It is appropriately sized, though the brevity is partly a symptom of omitted information rather than disciplined trimming.
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?
For a two-parameter tool with no annotations and no output schema, the description should outline what a search returns and how 'rows' behaves. Neither is covered, leaving the agent under-informed about invocation and results.
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 0% and the description mentions neither parameter. 'query' is fairly self-evident, but 'rows' is ambiguous (page size? max results? default?) and is left entirely unexplained in both the schema and the description.
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 (Search) and resource (Hong Kong government open-data catalogue DATA.GOV.HK), which is enough to tell it apart from unrelated siblings like sec_edgar_fulltext or fred_series. It does not, however, distinguish itself from the closely related hk_open_data_filter sibling, so it falls short of a 5.
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?
The description gives no when-to-use, when-not-to-use, or alternative guidance. The presence of the sibling hk_open_data_filter makes the missing routing information a real gap — an agent cannot tell from this text which of the two HK tools to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jina_readA
Fetch any URL as clean markdown via Jina Reader (free tier, no key). Extraction fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add useful behavior: it discloses the auth model ("free tier, no key") and the output format (clean markdown). It omits rate limits, timeouts, JS-rendering limits, and error behavior for failed fetches, which for a web-fetch tool are notable gaps.
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 short sentences with zero filler, front-loading the core action and mechanism before the fallback clarification. Every clause earns its place.
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?
For a single-parameter fetcher with no output schema and no annotations, the description covers the essentials an agent needs: what it returns (markdown), how it authenticates (no key), and its role (fallback). Only failure-mode and rate-limit behavior are left unaddressed.
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 0%, so the description must compensate, and it only loosely characterizes the single required parameter as "any URL." This clarifies that arbitrary web URLs are accepted, but adds no format, scheme, or validation detail beyond the bare schema string type.
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 any URL as clean markdown via Jina Reader"), making the tool's function immediately legible. The "any URL" scope implicitly contrasts with the domain-specific sibling APIs (sec_edgar, fred_series, etc.), but no sibling is named, so differentiation is inferential rather than explicit.
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?
"Extraction fallback" signals this is a secondary/generic extraction path rather than a primary data source, which implies when to reach for it. However, it never states the condition that triggers fallback, nor names any alternative to prefer first, leaving usage guidance implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_registry_searchB
Search the official MCP Registry for installable MCP servers (free, no key).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the search is free and requires no API key, but omits other behavioral traits like read-only nature, pagination, rate limits, or return format.
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?
The description is a single front-loaded sentence with no wasted words. It gets directly to the core purpose and includes a useful qualifier.
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?
For a tool with no output schema, zero parameter descriptions, and no annotations, the description is too thin. It does not explain what results look like, how query matching works, or how limit is applied.
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 0% for two parameters. The description does not explain the meaning or effect of 'query' or 'limit', leaving the agent with no added semantic guidance beyond the bare schema.
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?
The description states a specific verb ('Search') and a clearly named resource ('official MCP Registry for installable MCP servers'). It distinguishes itself from sibling tools by domain, though it does not explicitly contrast with any alternative search tool.
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?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. 'free, no key' gives cost/auth context but does not help select the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sec_edgar_companyC
US SEC registrant profile + recent filings by ticker or CIK (free, no key).
| Name | Required | Description | Default |
|---|---|---|---|
| tickerOrCik | Yes | e.g. AAPL or 320193 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that no API key is required, but says nothing about what "recent filings" means (count, timeframe), pagination, or return format for a read-only lookup.
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?
A single front-loaded sentence with no filler. It efficiently packs resource, key, and access note, though the parenthetical is slightly compressed and could be clearer.
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?
For a one-parameter read-only lookup with no output schema, the description is minimally adequate. It omits return shape, filing recency/volume, and result limits, leaving non-trivial gaps for an agent to work around.
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% and only one parameter exists, so the schema already documents tickerOrCik with an example. The description's "by ticker or CIK" merely restates the schema, adding no new format or constraint detail; 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 concrete resource and scope: "US SEC registrant profile + recent filings," with the lookup key (ticker or CIK) named inline. It is distinguishable from sec_edgar_fulltext by implying a profile lookup rather than full-text search, but it never names or contrasts that sibling explicitly.
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?
No when-to-use or when-not-to-use guidance is given, and no alternative tool is named. The "free, no key" note hints at access conditions but does not tell the agent when to prefer this over sec_edgar_fulltext or the Companies House tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sec_edgar_fulltextB
Full-text search US SEC EDGAR filings (free, no key). Use for primary-source corporate disclosures.
| Name | Required | Description | Default |
|---|---|---|---|
| forms | No | Comma-separated form types, e.g. 6-K,10-K,8-K | |
| query | Yes | Phrase to search, e.g. "Hong Kong" or a company name | |
| dateRange | No | e.g. 2026-01-01,2026-09-26 or "custom" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose that the source is free and requires no key, which is genuinely useful auth context, but it says nothing about rate limits, result volume, pagination, or ranking behavior of the full-text search.
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 short sentences, front-loaded with the core action and followed immediately by the intended use. Nothing is wasted, though the content is thin enough that it borders on under-specification for a search tool.
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?
For a 3-param search tool with no output schema and no annotations, the description covers what the tool is and the auth situation, but omits return-shape expectations, result limits, and how the dateRange/forms parameters interact with query. Adequate but with clear gaps.
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% – forms, query, and dateRange each carry examples in the schema. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 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+resource: 'Full-text search US SEC EDGAR filings'. It implicitly distinguishes itself from the sibling sec_edgar_company by emphasizing full-text (query-driven) rather than entity lookup, though it never names the sibling.
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?
'Use for primary-source corporate disclosures' gives a use context, but there is no when-not guidance, no prerequisites, and no named alternative among siblings like sec_edgar_company or companies_house_search. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
world_bank_indicatorC
World Bank development indicator time series (free, no key). e.g. country HK, indicator NY.GDP.MKTP.CD.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | e.g. 2015:2025 | |
| country | Yes | ||
| perPage | No | ||
| indicator | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It helpfully discloses that the source is free and requires no API key, but it omits rate limits, whether requests are paginated (even though perPage exists), default date range, and what the response shape looks like for a time series.
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 short clauses with no filler, and the key identifying example is front-loaded. It is appropriately sized for a lookup tool, though it is arguably too sparse to be a model of efficiency.
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?
For a 4-parameter tool with no annotations and no output schema, the description is thin: it never explains date-range syntax or defaults, perPage behavior, or what the returned time series looks like. It is enough to start a call but not to call it reliably.
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 only 25% — only 'date' is documented in the schema — but the description supplies concrete examples for the two required parameters (country HK, indicator NY.GDP.MKTP.CD) that the schema itself does not describe. This partially compensates for the gap, though perPage remains undocumented in both places.
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?
The description names the specific resource (World Bank development indicator time series) and identifies the data provider and indicator codes, so an agent can distinguish it from fred_series or hkma. It does not name an explicit retrieval verb, but the resource and the parameter examples make the action obvious.
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?
There is no when-to-use guidance and no routing to or away from sibling economic-data tools such as fred_series. The only usage-adjacent detail is 'free, no key', which describes cost/auth but not when this tool should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v1.0.0- First observed
companies_house_company - First observed
companies_house_search - First observed
fred_series - First observed
gdelt_news - First observed
hk_open_data_filter - First observed
hk_open_data_search - First observed
hkma - First observed
jina_read - First observed
mcp_registry_search - First observed
sec_edgar_company - First observed
sec_edgar_fulltext - First observed
world_bank_indicator
TDQS
Scored across 12 tools
Most tools target distinct providers/actions (sec_edgar_fulltext vs sec_edgar_company, companies_house_search vs companies_house_company). The main soft spot is hk_open_data_search vs hk_open_data_filter, where catalogue-level search versus dataset-level filtered query could be confused, and jina_read acts as a generic fallback that overlaps any fetch need.
Names consistently use snake_case with a provider-prefixed pattern (sec_edgar_*, hk_open_data_*, companies_house_*). A few tools (hkma, gdelt_news, fred_series, jina_read) drop the explicit action verb, creating minor deviation but still readable and predictable.
12 tools is well within the healthy 3-15 range for a multi-source data aggregator. Each tool maps to a recognizable external API or resource, so no entries feel redundant or padded.
The server covers a broad set of primary sources (US SEC, UK Companies House, HK open data, HKMA, World Bank, FRED, GDELT) with search+detail pairs where relevant. Minor gaps exist—no dedicated detail endpoints for World Bank/FRED/GDELT and no generic structured-data fetch beyond jina_read—but core workflows are workable.
Maintenance
Related MCP Connectors
75 MCP tools: SEC financials, FRED economics, IRS 990, FDA, FX, UK Companies House.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
17 Base data tools for agents over Streamable HTTP MCP. Pay per call in USDC via x402; no API key.
US government data as clean JSON for AI agents: SAM.gov contract opportunities, USAspending awards, Grants.gov grants, House STOCK Act trades, and SEC EDGAR filings (Form 4 insider trades, 8-K events, 13F holdings, 13D/G stakes, XBRL fundamentals, 10-K/10-Q sections). 19 read-only tools. Data is as fresh as each source publishes; congressional trades lag up to 45 days and report dollar ranges (House only). Free tier, no card.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to access SEC EDGAR filings, US Treasury rates, BLS labor statistics, and economic indicators without API keys.628 npmMIT
- FlicenseNot gradedqualityCmaintenanceOne MCP server that gives AI agents nine live data tools — company hiring signals, SEC filings, academic papers, GitHub repos, Hacker News, Stack Overflow, clinical trials, Federal Register, and global news — all as flat, citation-ready JSON with pay-per-result billing.-
- FlicenseNot gradedqualityCmaintenanceEnables URL content fetching, web search, text embeddings, reranking, and zero-shot classification through Jina AI APIs as MCP tools.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform company due diligence, OSINT, competitive, SEO, market, finance and regulatory research through a single MCP endpoint exposing 45 tools that draw on official public APIs, local D1 mirrors, and optional self-hosted sidecars. Every response is labelled by evidence class, so inferred estimates are never presented as equivalent to official data.6 npmMIT