automic-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., "@automic-mcplist my issuers"
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.
automic-mcp
Read-only MCP server for the Automic Registry Platform API.
Setup
Create an app with Read access in the Automic issuer portal (Settings > API Management).
npm install
npm run buildVariable | Required | Default |
| yes | |
| yes | |
| yes | |
| no |
|
| no |
|
Claude Code:
claude mcp add automic \
-e AUTOMIC_CLIENT_ID=... -e AUTOMIC_CLIENT_SECRET=... -e AUTOMIC_API_KEY=... \
-- node /path/to/automic-mcp/dist/index.jsClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"automic": {
"command": "node",
"args": ["/path/to/automic-mcp/dist/index.js"],
"env": {
"AUTOMIC_CLIENT_ID": "...",
"AUTOMIC_CLIENT_SECRET": "...",
"AUTOMIC_API_KEY": "..."
}
}
}
}Related MCP server: Blocksize Market Data
Tools
Tool | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| async report status and download |
Report and payment list results are written to AUTOMIC_REPORT_DIR (mode 0600) and returned inline only when under 50 KB. These files contain investor personal data.
Development
npm test
npm run typecheck
npm run smoke # live test, needs AUTOMIC_* env vars
npm run inspect # MCP InspectorLicense
Available Tools
11 toolsbuild_registration_detailsBuild registration detailsBRead-onlyIdempotent
Format names, designation and address into a registration details string. Creates nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | ||
| address | Yes | ||
| designation | No | Account designation, e.g. <SMITH FAMILY A/C> | |
| namesOnSameLine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so 'Creates nothing' largely restates them. The description adds no behavioral context beyond that: it does not say the result is a plain string, how overseas vs Australian addresses are rendered differently, or how missing optional fields are handled despite openWorldHint=true.
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, front-loaded sentences with no filler, and the scope disclaimers land early. However, the terseness crosses into under-specification for a tool with nested inputs rather than being economically complete.
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 should convey the shape of the produced string and the effect of namesOnSameLine and address type selection; it does neither. For a formatting utility whose whole value is the output layout, the definition leaves the agent guessing at the exact result.
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%, and the description does not compensate: it lists names/designation/address but ignores 'namesOnSameLine' entirely, which is a behavior-changing boolean, and says nothing about how addressLine1/2, state, or overseas vs Australian formatting are combined. With nested objects and low coverage, real clarification was needed here.
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 gives a specific verb and result object ('Format ... into a registration details string') and enumerates the three main inputs (names, designation, address). It is clear enough to distinguish from the report/listing siblings, though it never names an actual alternative tool it feeds into.
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?
Usage is only implied: 'Creates nothing' hints this is a pure formatting helper to be chained before some downstream registration step, but there is no explicit when-to-use, no mention of what consumes the resulting string, and no exclusions versus the sibling report tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_pricesGet daily pricesBRead-only
Daily prices (OHLC, volume, NAV, application/redemption) for a security. Max 20 per page.
| Name | Required | Description | Default |
|---|---|---|---|
| toDate | No | End date, YYYY-MM-DD (default today) | |
| fromDate | No | Date in YYYY-MM-DD format | |
| issuerId | Yes | Issuer ID (from list_issuers) | |
| pageSize | No | Results per page, 1-20 (default 20) | |
| pageNumber | No | Zero-based page number (default 0) | |
| securityId | Yes | Security ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds the result-cap context ('Max 20 per page'), though that duplicates the pageSize maximum of 20 in the schema, and it does not say what happens when fromDate is omitted or whether pagination continues until exhausted.
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 with the payload contents front-loaded and no filler. It is efficient, though the terseness leaves behavioral gaps that other dimensions penalize.
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 six-parameter read tool with full schema coverage and no output schema, the definition covers what the rows contain but omits pagination traversal guidance and date-range defaults (notably the absence of a stated default for fromDate). Adequate as a minimum-viable definition, not complete.
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 every parameter including issuerId's provenance and the pageSize bounds is already documented. The description's only parameter-adjacent statement restates the 20-per-page cap, adding no meaning beyond the structured fields.
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?
Names the specific resource (daily prices) and enumerates the returned measures (OHLC, volume, NAV, application/redemption) for a single security, which separates it from siblings like get_top_holders or list_distributions. The retrieval verb is only implied by the name, but the content scope is unambiguous.
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 versus other data tools, no mention that issuerId must be resolved via list_issuers, and no statement about required date-range behavior. The agent must infer all invocation context from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_distribution_payment_listGet distribution payment listBRead-only
Per-holder payments for a distribution: components, tax, DRP, net amount, payment method. Saved to a JSON file; returned inline if small. Contains investor personal data.
| Name | Required | Description | Default |
|---|---|---|---|
| issuerId | Yes | Issuer ID (from list_issuers) | |
| distributionId | Yes | Distribution ID (from list_distributions) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true. The description adds two genuinely useful traits beyond that: results are written to a JSON file and only returned inline when small, and the payload contains investor personal data, which flags sensitivity. It does not say how large 'small' is or how to retrieve the file when it is not inlined, so the delivery mechanism stays partly opaque.
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 dense sentence covering payload contents plus two short clauses on delivery and data sensitivity. Front-loaded with what the tool returns and zero 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, the description does the work of listing the returned columns, which is what an agent needs to decide relevance. The gap is the file-vs-inline handoff: it never explains how the agent gets the JSON file when the response is too large to return inline.
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 both parameters are documented with their source tools (list_issuers, list_distributions). The description adds nothing about the parameters themselves - the listed fields are return values, not inputs - so 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-resource pair ('per-holder payments for a distribution') and enumerates the payload contents (components, tax, DRP, net amount, payment method). It is clearly distinguishable from report-building siblings, though it does not explicitly name an alternative.
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 guidance, no prerequisites, and no exclusions. The agent must infer from the required distributionId and the sibling list_list_distributions that this is a per-distribution drill-down rather than a report generator; nothing in the text says so.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportGet reportARead-onlyIdempotent
Check status of an async report and download it when ready.
| Name | Required | Description | Default |
|---|---|---|---|
| issuerId | Yes | Issuer ID (from list_issuers) | |
| reportId | Yes | ||
| waitSeconds | No | Seconds to wait before returning a pending reportId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive semantics, so the bar is lower. The description usefully adds that the report is async and that the call may both poll and download, but it says nothing about terminal states, what happens on repeated calls while pending, or error behavior for expired report IDs.
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 short sentence with zero filler, and the two distinct behaviors (status check, download) are front-loaded in order of occurrence. Nothing in it is redundant with the title.
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 three-parameter read-only polling tool with no output schema, the description covers the essential shape but omits the linkage to the run_*_report siblings that produce reportId, and omits what a pending versus ready response looks like. Adequate, but an agent still has to guess the workflow glue.
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 67%: issuerId and waitSeconds carry descriptions, while reportId has none in the schema. The description does not fill that gap by explaining where reportId originates, though 'when ready' hints at the pending/polling semantics that waitSeconds controls.
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 pair and resource: check status of an async report and download it when ready. This clearly distinguishes it from the run_*_report siblings, which presumably kick off generation, though the description never explicitly names those siblings.
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?
Usage is only implied by the phrase 'async report' — an agent can infer this is the follow-up call after run_register_listing_report or similar, but no when-to-use or prerequisite statement is given. There is no explicit note that reportId must come from one of the run_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_holdersGet top holdersARead-only
Top holders of securities as of a date. Max 50. Holder numbers are masked without the 'view holder number' permission.
| Name | Required | Description | Default |
|---|---|---|---|
| asOfDate | No | As-of date, YYYY-MM-DD (default today) | |
| issuerId | Yes | Issuer ID (from list_issuers) | |
| noOfHolders | No | Number of holders, 1-50 (default 20) | |
| securityIds | Yes | Security IDs (from list_securities) | |
| showGroupMembers | No | List members of each holder group | |
| showHolderNumber | No | ||
| includeHolderGroup | No | Aggregate holders into holder groups |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive, open-world profile, so the bar is lower, and the description still adds real behavioral value: a hard result cap of 50 and the fact that holder numbers are masked unless the 'view holder number' permission is held. That masking rule is exactly the kind of data-shaping caveat an agent cannot infer from structured fields. It stops short of describing return shape or the effect of grouping flags.
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 terse sentences, front-loaded with the resource and scope, then the cap, then the caveat. Nothing is padded and no sentence repeats another; 'Max 50' mildly duplicates the schema maximum but reads as a useful warning rather than 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?
For a 7-parameter tool with no output schema and three boolean flags that alter aggregation, the description is thin: it never says what a returned holder record contains or how grouping changes results. With annotations and an 86%-covered schema carrying much of the load, three sentences are adequate but leave 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 coverage is 86%, so the baseline is 3. The description reinforces the 50-item cap and hints at the permission context behind showHolderNumber, which the schema leaves undocumented, but it explains nothing about the holder-group parameters (includeHolderGroup, showGroupMembers) that materially change the response.
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 resource (top holders of securities) with a temporal qualifier (as of a date), which is materially more precise than the title alone. It does not differentiate from any sibling, though no sibling in the list appears to compete with holder data, so the risk of misfire is low.
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?
Usage is only implied: the tool is meant for holder lookups at a point in time, capped at 50. The permission note hints at a prerequisite for full data, but there is no explicit 'use this when...' statement, no exclusions, and no pointer to alternatives for related data such as issuer or security listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_distributionsList distributionsBRead-only
Approved distributions in a record-date range, with dates, DRP details and components.
| Name | Required | Description | Default |
|---|---|---|---|
| issuerId | Yes | Issuer ID (from list_issuers) | |
| toRecordDate | Yes | End of record-date range, YYYY-MM-DD | |
| fromRecordDate | Yes | Start of record-date range, YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds a genuine behavioral fact beyond them — only *approved* distributions are returned, plus a hint at the returned fields — but says nothing about volume, pagination, ordering or result caps for a date-range query.
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 phrase with no filler, and the scoping constraint appears first. It is a noun fragment rather than a sentence with an explicit verb, which slightly weakens dispatch clarity but wastes no words.
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 simple three-required-parameter read tool with full schema coverage and no output schema, the description covers what it returns and the filter applied. It is still thin on the things an agent would need to call it confidently: pagination/volume expectations and disambiguation from the payment-list sibling.
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%, with each parameter documented (issuerId sourced from list_issuers, YYYY-MM-DD date patterns), so the schema does the heavy lifting. The description confirms the from/to pair defines a record-date range but adds no semantics beyond that, making the baseline 3 correct.
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 resource (distributions), the scoping dimension (record-date range) and the payload (dates, DRP details, components), and 'Approved' narrows the result set. It does not explicitly distinguish this from the sibling get_distribution_payment_list, so an agent still has to guess which to use for payment-level data.
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?
Usage is only implied: the required record-date range plus issuerId suggests "use when you need distributions for an issuer over a period". There is no explicit when-not guidance, no mention of how this differs from get_distribution_payment_list, and no statement of prerequisites beyond what the schema already says.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issuersList issuersARead-only
List issuers this API app can access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds one piece of behavioral context beyond that — results are scoped to what the API app is permitted to access — but says nothing about pagination, result size, or ordering for an open-world listing.
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 short sentence, front-loaded with the verb and resource, with no filler or repetition of the title. Every word carries 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?
For a no-parameter, read-only listing tool this is close to sufficient, and annotations plus the empty schema cover the invocation mechanics. However, with no output schema, the description leaves the agent guessing at the shape and size of the returned issuer list, which is the main remaining gap.
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 tool takes zero parameters, so there is nothing for the description to clarify and the baseline of 4 applies. The single sentence does not introduce any spurious parameter concepts.
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 pairs a specific verb ("List") with a specific resource ("issuers"), which distinguishes it from siblings like list_securities or list_distributions without ambiguity. It stops short of any explicit sibling differentiation or scope statement beyond the access qualifier.
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?
Usage is only implied: the agent infers it should call this when it needs the set of issuers available to the app. The phrase "this API app can access" hints at a permission boundary but there is no when-to-use, when-not-to-use, or pointer to an alternative sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_securitiesList securitiesARead-only
List an issuer's securities with holder counts and issued capital.
| Name | Required | Description | Default |
|---|---|---|---|
| issuerId | Yes | Issuer ID (from list_issuers) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context by saying the response includes holder counts and issued capital, but it says nothing about pagination, result size, or ordering for what could be a long list.
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; the resource, scope, and returned fields all appear immediately.
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 tool this is close to adequate, and with no output schema the mention of holder counts and issued capital partially substitutes for return-value documentation. It still leaves open how large the list can be, whether it is paginated, and what the absence of securities means.
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?
There is only one parameter and the schema documents it at 100% coverage, including the note that issuerId comes from list_issuers. The description's phrase 'an issuer's securities' reinforces that the parameter selects the issuer scope, so no meaning is missing beyond the 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?
States a specific verb and resource ('List an issuer's securities') and scopes it to a single issuer, which separates it from list_issuers and get_top_holders. It also previews the returned fields (holder counts, issued capital), which further narrows the purpose, though it never names a 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?
The description implies the context (you must already know the issuer), and the schema's issuerId note points at list_issuers as the source. However, it gives no explicit when-to-use guidance, no exclusions, and no mention of when get_top_holders would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_fund_cash_flow_reportRun fund cash flow reportCRead-only
Fund applications and redemptions with pending and completed totals. Async, same as run_register_listing_report.
| Name | Required | Description | Default |
|---|---|---|---|
| issuerId | Yes | Issuer ID (from list_issuers) | |
| tradeType | No | Default All | |
| toTradeDate | No | Date in YYYY-MM-DD format | |
| waitSeconds | No | Seconds to wait before returning a pending reportId | |
| fromTradeDate | No | Date in YYYY-MM-DD format | |
| orderStatuses | No | Pending is only valid when searchByTradeDate is false | |
| toOrderDateTime | No | ||
| fromOrderDateTime | No | ||
| searchByTradeDate | No | true: filter by trade date (from/toTradeDate); false: by order date-time | |
| includeInvestorDetails | No | ||
| includeVerificationDetails | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds one genuinely useful trait not in the structured fields: the report is asynchronous, and it points at a sibling with the same async pattern. It stops short of explaining the pending reportId to get_report polling flow implicit in waitSeconds, or any permission/rate-limit context.
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, front-loaded sentences with no filler. It is terse rather than padded, though the brevity comes at the cost of substance rather than from efficient information density.
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 an 11-parameter asynchronous report generator with no output schema and only 64% parameter description coverage, this is insufficient. Missing: how the async reportId connects to get_report, what happens on timeout, date-filter semantics (searchByTradeDate switching), and meaning of the include* flags.
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 64%, and the description adds no parameter meaning whatsoever. Several parameters carry no schema description at all (fromOrderDateTime, toOrderDateTime, includeInvestorDetails, includeVerificationDetails), and the description does nothing to compensate for those gaps.
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 subject matter (fund applications and redemptions with pending and completed totals), which is more specific than the name alone. However it is a noun phrase with no verb and never states that it generates an asynchronous fund cash flow report, nor does it differentiate it from run_transaction_listing_report, which an agent could easily confuse it with.
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 at all. The only comparative reference to a sibling, run_register_listing_report, is about async behavior, not about choosing between tools, so an agent gets no help deciding between this and run_transaction_listing_report or run_register_listing_report.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_register_listing_reportRun register listing reportARead-only
Register listing for securities as of a date. Async: waits up to waitSeconds, else returns a reportId for get_report. Saved to a JSON file; returned inline if small. Contains investor personal data.
| Name | Required | Description | Default |
|---|---|---|---|
| asOfDate | No | As-of date, YYYY-MM-DD (default today) | |
| issuerId | Yes | Issuer ID (from list_issuers) | |
| priceName | No | Price used to value balances | |
| holderTypes | No | ||
| securityIds | Yes | Security IDs (from list_securities) | |
| waitSeconds | No | Seconds to wait before returning a pending reportId | |
| countryCodes | No | ISO alpha-3 country codes, e.g. AUS | |
| maximumHolding | No | ||
| minimumHolding | No | Default 1 | |
| maximumPostcode | No | ||
| minimumPostcode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds genuinely new behavior: the blocking-then-pending async pattern, the reportId handoff to get_report, dual delivery (JSON file vs inline for small results), and the presence of investor personal data. It omits whether the file path is returned and any size/sensitivity handling guidance, so it falls short of fully rich disclosure.
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?
Four short, front-loaded statements with no filler; the deliverable comes first, then async mechanics, then delivery format, then a data-sensitivity warning. The telegraphic sentence fragments ('Saved to a JSON file; returned inline if small') are dense but slightly clipped for readability.
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 11 parameters and no output schema, the description does the important work of explaining the return contract (inline vs file vs pending reportId) and flagging PII. It still leaves the filter parameters and any notion of report contents or output location unexplained, which matters for a report-generation tool of this size.
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 64%, so most documented parameters already carry their own descriptions. The description only adds semantic meaning for waitSeconds (it explains the blocking-then-return-reportId behavior) and hints at asOfDate; the six-plus filtering parameters (holderTypes, priceName, countryCodes, min/max holding, postcodes) get no mention at all, leaving the gap partly uncompensated.
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 first sentence names a specific resource (register listing for securities) and a scope (as of a date), which distinguishes it from run_transaction_listing_report and run_fund_cash_flow_report. It stops short of naming those siblings explicitly, so the differentiation is inferential rather than stated.
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 gives clear guidance for the async path ('waits up to waitSeconds, else returns a reportId for get_report'), which tells the agent how to continue when the report is pending. However, it never says when an agent should pick this report over the other run_*_report siblings, nor what prerequisites (issuer, securities) must be resolved first, so usage selection is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_transaction_listing_reportRun transaction listing reportBRead-only
Holding movements for securities over a date range. Async, same as run_register_listing_report.
| Name | Required | Description | Default |
|---|---|---|---|
| toDate | Yes | Date in YYYY-MM-DD format | |
| fromDate | Yes | Date in YYYY-MM-DD format | |
| issuerId | Yes | Issuer ID (from list_issuers) | |
| securityIds | Yes | Security IDs (from list_securities) | |
| waitSeconds | No | Seconds to wait before returning a pending reportId | |
| minThreshold | No | Minimum movement size (default 0) | |
| movementTypes | No | Filter by movement type, e.g. Application, Redemption, Transfer, TransferIn, TransferOut, Reinvestment, MarketMovement, IssuerToChessTransfer, ChessToIssuerTransfer, Adjustment, Cancellation, Buyback. Omit for all. | |
| includeHolderNumber | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and non-destructive behavior, so the safety profile is covered. The description adds 'Async', which is genuinely useful, but stops short of explaining the pending-reportId/get_report follow-up flow, and the waitSeconds schema field is left to carry that story alone.
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, scope stated first, no redundant wording. It is efficient but arguably under-filled rather than wasteful — the terseness costs clarity rather than saving it.
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 an 8-parameter async report generator with a high-coverage schema, the definition leaves meaningful gaps: it never explains how to retrieve results after an async return, and includeHolderNumber is undocumented. However, the core operation remains inferable, keeping it adequate rather than broken.
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?
With 88% schema description coverage, the schema already documents dates, issuerId, securityIds, waitSeconds, minThreshold, and movementTypes in detail. The description adds no meaning on top, and the one undocumented field (includeHolderNumber) is left unexplained in both places, so the standard 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?
The phrase 'Holding movements for securities over a date range' identifies the data domain and scope, but never states the action (generate/run a report) and only distinguishes itself from run_register_listing_report by noting identical async behavior, not by contrast in what data each returns.
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 routing signal is 'same as run_register_listing_report', which communicates the async pattern but gives no criteria for choosing transaction listing over register listing, fund cash flow, or the other report siblings, and no exclusions or prerequisites (e.g., that issuer and security IDs must come from list_issuers/list_securities).
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.
11 tool updates
v0.1.0- First observed
build_registration_details - First observed
get_daily_prices - First observed
get_distribution_payment_list - First observed
get_report - First observed
get_top_holders - First observed
list_distributions - First observed
list_issuers - First observed
list_securities - First observed
run_fund_cash_flow_report - First observed
run_register_listing_report - First observed
run_transaction_listing_report
TDQS
Scored across 11 tools
Most tools target a distinct resource or report type, and the three run_*_report variants are separated by their subject matter. The only mild friction is between list_distributions and get_distribution_payment_list (aggregate vs per-holder payment detail) and the generic get_report, but descriptions resolve both.
Every name is snake_case verb_noun (list_issuers, get_daily_prices, run_register_listing_report), with consistent verbs chosen for the action type: list for collections, get for single fetches, run for async reports.
Eleven tools is well within the sweet spot for a domain-specific data server, and each tool covers a distinct data product (issuers, securities, prices, holders, distributions, payments, three report types, report retrieval, plus a formatting helper).
The core read workflow is covered end to end: issuers to securities to prices/holders, distributions to per-holder payments, and async reports with a retrieval tool. Minor gaps exist — no single-record get_issuer/get_security detail endpoint and no holder lookup — but agents can work around these via the list tools.
Maintenance
Related MCP Connectors
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Public read-only MCP server for HODLXXI agent identity, trust, receipts, and verification.
Read-only MCP server for Belarusian securities: tokens, shares, bonds, companies.
Read-only MCP server: verify credentials and browse escrows on the Stellar testnet contract.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server providing access to Belarusian securities data: tokens, shares, bonds, companies, ticker search, and company name or UNP search.MIT
- AlicenseAqualityBmaintenanceRead-only MCP server for Blocksize real-time market data: crypto VWAP, bid/ask, FX, metals and tokenized equities, with pricing, coverage and x402 endpoint lookup. Signed-in users of the Claude, ChatGPT and Cursor connectors get 30,000 free live-data credits every month (1 credit = $0.001); subscriptions from EUR 49/month.71MIT
- AlicenseAqualityDmaintenanceRead-only MCP server for Polymarket, providing order books, market metadata, and price history via public GET endpoints. It requires no private keys and cannot place trades.5MIT
- AlicenseNot gradedqualityCmaintenanceProvides read-only MCP tools for market snapshots, position risk, order reconciliation, and daily report previews with deterministic financial calculations, evidence chains, and audit trails.MIT