atpar-mcp-server
OfficialClick 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., "@atpar-mcp-serverShow my portfolio balances"
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.
atpar-mcp-server
MCP server for the At Par Trading API — trade crypto, manage portfolios, and access market data from any MCP-compatible AI agent.
Quick start
npx atpar-mcp-serverRequires VT_API_KEY and VT_API_SECRET environment variables.
Related MCP server: seashail
Configuration
Claude Code (.mcp.json)
{
"mcpServers": {
"atpar": {
"command": "npx",
"args": ["-y", "atpar-mcp-server"],
"env": {
"VT_API_KEY": "vtk_...",
"VT_API_SECRET": "..."
}
}
}
}Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"atpar": {
"command": "npx",
"args": ["-y", "atpar-mcp-server"],
"env": {
"VT_API_KEY": "vtk_...",
"VT_API_SECRET": "..."
}
}
}
}Environment variables
Variable | Required | Description |
| Yes | API key (e.g. |
| Yes | Base64-encoded API secret |
| No | Base URL (defaults to |
Tools (16)
Portfolio
Tool | Description |
| List all portfolios for the authenticated user |
| Get asset balances for a portfolio |
| Get the deposit address for a portfolio |
| List deposits for a portfolio |
| Get ledger entries for a portfolio |
Trading
Tool | Description |
| Place a new order (market, limit, or swap) |
| Get details of a specific order |
| List orders for a portfolio |
| Cancel an open order |
| Get fills (executions) for an order |
Market Data
Tool | Description |
| List all available trading instruments |
| Get current prices for all instruments |
| Get OHLCV candlestick data for an instrument |
| Get available swap liquidity and pricing |
Notifications
Tool | Description |
| Get notifications for the authenticated user |
| Get the count of unread notifications |
Resources (2)
URI | Description |
| Full list of trading instruments with tick sizes, min order sizes, and status |
| List of supported assets (currencies) on the platform |
Development
npm install
npm run build
npm testLicense
MIT
Available Tools
16 toolscancel_orderA
Cancel an open order
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | Order ID to cancel | |
| portfolioId | Yes | Portfolio 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 of behavioral disclosure. It only states 'Cancel an open order' without disclosing side effects, reversibility, error handling, or behavior for non-open orders. This is a significant gap for a mutation 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?
The description is a single sentence, front-loaded with the verb, and contains zero redundant or wasted 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 two-parameter tool with fully described schema and clear purpose, the description provides essential context. However, it omits return value and edge-case behavior, so it is not fully 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?
The input schema provides complete descriptions for both parameters (100% coverage). The description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
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 uses a specific verb 'cancel' plus resource 'order' with a scope constraint 'open'. This clearly distinguishes the tool from siblings like place_order, get_order, and list_orders.
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 clearly states the tool cancels an open order, providing a clear context for when to use it. It does not explicitly name alternatives or exclusions, but the context is sufficient for a simple operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_candlesB
Get OHLCV candlestick data for an instrument
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End time (RFC3339 or Unix timestamp) | |
| from | No | Start time (RFC3339 or Unix timestamp) | |
| interval | Yes | Candle interval (e.g. 1m, 5m, 1h, 1d) | |
| instrument | Yes | Instrument symbol (e.g. btc/usd.spot) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the basic function and omits details about time range defaults, pagination, rate limits, authentication requirements, or response format. This leaves significant behavioral ambiguity 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?
The description is a single concise sentence, front-loaded with the verb 'Get', containing no redundant information or filler. It is appropriately sized for the tool's simplicity.
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?
Given the lack of annotations and output schema, the description should provide richer context about expected return values, time range behavior, and any implicit constraints. It only states the core function, leaving the agent uncertain about how to use the tool correctly (e.g., meaning of from/to, candle 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?
The input schema already provides descriptions for all four parameters (instrument, interval, from, to) with 100% coverage. The description adds no additional meaning beyond the schema, such as default behaviors or formatting nuances. Baseline of 3 is appropriate since the schema carries the parameter semantics.
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 'Get OHLCV candlestick data for an instrument' clearly states the specific verb (get), resource (OHLCV candlestick data), and object (instrument). This distinguishes it from sibling tools like get_prices (current prices) and get_instruments (instrument metadata).
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 provides no guidance on when to use this tool versus alternatives like get_prices or get_portfolios. It does not mention any constraints or preferred context, leaving the agent to infer usage solely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deposit_addressC
Get the deposit address for a portfolio
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Blockchain (default: ethereum) | ethereum |
| network | No | Network (default: mainnet) | mainnet |
| portfolioId | Yes | Portfolio ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the operation is to get an address, but does not reveal whether this is read-only, whether it creates a new address, what chains/networks are supported, or any side effects. This is insufficient for a tool with no annotation safety hints.
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, clear sentence with no wasted words. It is front-loaded and easy to parse, though it is minimal.
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?
The description lacks crucial context such as the return value, supported chains/networks, and any behavioral constraints. Given no output schema and no annotations, the description should provide more detail to be complete for an agent to use the tool correctly.
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 input schema already provides descriptions for all three parameters (chain, network, portfolioId), achieving 100% coverage. The tool description adds no additional parameter information, but the baseline is met by the schema's thorough documentation.
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 clearly states the tool's function: retrieving a deposit address for a portfolio. It uses a specific verb ('get') and identifies the resource ('deposit address') and scope ('portfolio'). However, it does not distinguish itself from sibling tools like get_deposits, which may also relate to deposits.
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 provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, exclusions, or reference to other tools such as get_portfolios or get_deposits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_depositsB
List deposits for a portfolio
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return | |
| offset | No | Offset for pagination | |
| portfolioId | Yes | Portfolio ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It only says 'list', but fails to disclose pagination behavior, default limits, ordering, inclusion of pending items, or whether it is a read-only operation. This is a significant gap for a well-specified read 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?
The description is a single sentence with no filler. It is concise, front-loaded with the verb and resource, and contains no redundant information. Perfectly efficient for its size.
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 and no annotations, leaving the description to explain return values and behavioral nuances. It does not mention what a deposit is, how pagination works, or what the response contains. This is under-specified for a 3-parameter tool.
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% (all three parameters have descriptions). The description adds no extra semantic meaning beyond indicating the portfolio context, so the baseline score of 3 is appropriate.
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 ('list'), resource ('deposits'), and scope ('for a portfolio'), clearly distinguishing this tool from siblings like get_portfolio_ledger (ledger) and get_portfolio_assets (assets). The purpose is immediately understood.
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 is provided on when to use this tool versus alternatives or any exclusions. Unlike the get_calls example, it does not mention that other tools should be used for different types of history or filtering, so the agent gets no decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instrumentsA
List all available trading instruments with tick sizes and min order sizes
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It indicates a read-only operation ('List') and specifies the returned fields, making the behavior clear. However, it omits details like pagination or whether the list is dynamic, which are minor for a simple listing 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?
The description is a single concise sentence that front-loads the action and includes key output details. No unnecessary words or repetition.
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?
Given the lack of an output schema, the description provides the essential information: it lists all instruments and highlights two important fields. It could be more complete by mentioning all returned fields (e.g., instrument ID, symbol), but it is sufficient for a basic list tool.
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 has zero parameters, and the schema properties are empty. Descriptions baseline is 4 for no parameters; the description adds context about the response content, which is sufficient.
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 clearly states the action ('List all available trading instruments') and the specific data returned ('tick sizes and min order sizes'). This distinguishes it from sibling tools like get_prices or get_portfolios, which cover different resources.
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 usage: when you need a list of all trading instruments with their tick sizes and min order sizes. It does not explicitly mention alternatives or exclusions, but the tool's name and description make its purpose unambiguous among the listed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notificationsB
Get notifications for the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return | |
| offset | No | Offset for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the transparency burden. It states 'for the authenticated user' implying authentication requirements, but it does not disclose pagination behavior, return format, or potential side effects. Since this is a read operation, some safety is implied, but without annotations, more detail is expected.
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 concise sentence of seven words, with no unnecessary information. It is front-loaded and immediately communicates the tool's function.
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?
The tool is simple with two optional parameters and no output schema. The description covers the core purpose but omits details like ordering, read/unread filtering, or what a notification object contains. Given the absence of an output schema, more context would improve completeness, but the tool is simple enough that the description is minimally viable.
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 'limit' and 'offset' already described in the schema. The description adds no extra meaning to the parameters, but the baseline of 3 is appropriate since the schema fully documents them.
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 uses a specific verb 'Get' and identifies the resource 'notifications for the authenticated user', making the purpose clear. However, it does not explicitly distinguish from sibling tools like get_unread_count, which could be confused for a similar operation.
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 provides no guidance on when to use this tool versus alternatives. It does not mention that get_unread_count is for counts only, nor any other selection criteria. Usage is only implied by the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderB
Get details of a specific order
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | Order ID | |
| portfolioId | Yes | Portfolio ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Get details' implies a read operation, but the description does not disclose authentication needs, potential errors, return format, or whether the order must belong to the specified portfolio. It adds no information beyond the obvious read intent.
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, concise sentence with no wasted words. However, it is extremely brief, and while it is structured logically, it omits essential context, making it seem under-specified rather than appropriately concise.
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?
This is a simple getter with two well-documented parameters and no output schema, but the description is too sparse to be complete. It does not explain what 'details' include, whether historical or current data is returned, or how this relates to portfolio context. An agent would lack sufficient information to fully set expectations.
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 (orderId, portfolioId) have descriptions in the schema. The description itself adds no extra meaning beyond the schema; it only references 'a specific order' without elaborating on the portfolioId parameter. The schema already handles parameter semantics, so a baseline score of 3 is appropriate.
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 'Get details of a specific order' uses a specific verb ('Get') and resource ('details of a specific order'), clearly distinguishing it from sibling tools like list_orders (which lists multiple orders) and get_order_fills (which retrieves fills specifically). The scope is unambiguous and matches the tool name.
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 provides no guidance on when to use this tool vs. alternatives like list_orders or get_order_fills. No context, exclusions, or prerequisites are mentioned; it only states what the tool does without any situational direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_fillsB
Get fills (executions) for an order
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | Order ID | |
| portfolioId | Yes | Portfolio ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states a simple read action without mentioning side effects, rate limits, pagination, or the possibility of multiple fills per order. It does not contradict anything but remains minimal.
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, clear sentence with no unnecessary words. It is entirely front-loaded and every word contributes to the meaning.
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?
The tool is a simple read operation with two parameters and no output schema. The description adequately conveys the core intent, but lacks details about the response shape (e.g., whether multiple fills are returned), any temporal ordering, or special cases like partial fills. It is minimally viable but has 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%, so both 'orderId' and 'portfolioId' are fully documented. The description adds no additional meaning about how these parameters relate or why both are required. This matches the baseline of 3 for high schema coverage.
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 'Get fills (executions) for an order' clearly states the specific action (get) and resource (fills for an order). The parenthetical clarifies the domain term 'fills'. This distinctly differentiates it from sibling tools like get_order (which returns order details) and list_orders (which lists orders).
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 explicit guidance is provided on when to use this tool versus alternatives. The description does not mention using get_order for order status or list_orders for order overview. While inferable from the name, the description itself offers no context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_assetsB
Get asset balances for a portfolio
| Name | Required | Description | Default |
|---|---|---|---|
| portfolioId | Yes | Portfolio ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action. It discloses no side effects, permissions, error behavior, or what exactly is returned, which is minimal for a getter.
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 concise sentence that front-loads the key information. No filler or unnecessary 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?
The tool is simple (1 parameter, no output schema), but the description doesn't clarify response shape or edge cases such as whether zero balances are included. It's adequate but lacks completeness.
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% with a single parameter described as 'Portfolio ID'. The description adds no extra meaning beyond the schema, so baseline 3 is appropriate.
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?
Description uses the specific verb 'Get' with the resource 'asset balances' scoped to 'a portfolio', clearly distinguishing it from siblings like get_portfolios (listing portfolios) and get_portfolio_ledger (historical transactions).
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 alternatives. It doesn't mention that this is for current holdings versus historical data, or reference any sibling tools for different cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_ledgerB
Get ledger entries for a portfolio
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return | |
| offset | No | Offset for pagination | |
| portfolioId | Yes | Portfolio ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it merely restates the tool name. It does not disclose pagination behavior, result formatting, or any constraints, adding no value beyond the name.
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, concise sentence with no unnecessary words. It earns its place without redundancy.
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 straightforward read tool, the description is minimally sufficient. However, without an output schema or annotations, it lacks detail about return values, pagination behavior, or any special conditions, making it only adequately 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?
The input schema has 100% coverage with descriptions for all three parameters (limit, offset, portfolioId). The tool description adds no additional parameter context, so the baseline score of 3 is appropriate.
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 clearly identifies the resource ('ledger entries') and the scope ('portfolio'), distinguishing it from sibling tools like get_portfolio_assets and get_deposits. The verb 'Get' unambiguously indicates a read operation.
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 provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or relationship to other portfolio-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfoliosA
List all portfolios for the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the transparency burden. It discloses the authentication scope and the 'list all' nature, implying a read-only operation, but does not detail return format, ordering, or error behavior. For a simple list tool this is adequate, but not comprehensive.
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. Perfectly sized for the tool's simplicity.
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?
The description adequately defines the tool's scope for a parameterless list operation, and the sibling names clarify its role. Lacks an explicit return type description, but 'List' implies an array.
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 zero parameters, the schema is trivially complete. The description does not need to explain parameters, earning the baseline of 4.
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 uses a specific verb 'List' and clearly identifies the resource 'all portfolios for the authenticated user', distinguishing it from sibling tools like get_portfolio_ledger and get_portfolio_assets which target specific sub-resources.
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 provides a clear context ('for the authenticated user') but does not explicitly state when to use this tool instead of the sibling tools, leaving usage guidance implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricesA
Get current prices for all instruments
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only states the action and scope. It omits any details about return format, data freshness, authentication needs, or potential side effects. While the tool is inherently read-only, the description does not explicitly disclose this or any other behavioral traits.
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 sentence that front-loads the action and resource with no unnecessary words. It is appropriately sized and instantly parseable, scoring high on conciseness and 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?
Given the tool's simplicity (zero parameters, no output schema, no annotations), the description provides adequate context for an agent to invoke it correctly. It explains the main purpose and scope, and while it does not describe the return structure, that is not required for a parameterless retrieval tool.
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 has no parameters, so the description correctly does not attempt to describe any. The schema is trivially complete (100% coverage), and per guidelines, a zero-parameter tool earns a baseline of 4. The description adds no parameter-specific information because none is needed.
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 clearly states the action (get), the object (current prices), and the scope (all instruments), making it distinct from sibling tools like get_instruments (instrument metadata) and get_candles (historical price data). It leaves no ambiguity about what this tool does.
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 a simple snapshot use case but provides no explicit guidance on when to use this tool versus alternatives such as get_candles or get_instruments. It neither names alternatives nor gives when-not-to-use conditions, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swap_liquidityB
Get available swap liquidity and pricing
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It confirms a read-only action via 'Get' but provides no additional context such as data freshness, return shape, pagination, or any limitations. The description does not disclose more than the name already implies.
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 concise sentence with no redundancy or filler. It is appropriately sized for a parameterless getter, though it lacks some specifics that would make it more useful.
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 parameters, no output schema, and no annotations, the description is adequate but leaves gaps. It does not clarify what 'swap liquidity' means, whether the returned data is a list, or how 'pricing' relates to the tool's scope. Given the simplicity of the tool, it is minimally viable but not fully informative.
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 has zero parameters, so the description does not need to explain parameter behavior. The description adds no parameter details, but the baseline for zero parameters is 4 because schema coverage is complete by absence.
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 uses a specific verb ('Get') and a clear resource ('available swap liquidity and pricing'), which states the tool's function without ambiguity. It is implicitly distinguished from sibling tools like get_prices, though it does not explicitly name an alternative or contrast its scope.
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 offers no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. The only hint is the tool name itself, which implies swap-related use, but the description does not add context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unread_countA
Get the count of unread notifications
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It does not explicitly state that this is a read-only operation, nor does it describe return format, error behavior, or scope (e.g., which user/account's notifications). The verb 'get' implies read-only, but that is not enough for transparency.
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 sentence of 7 words, perfectly front-loaded and free of filler. Every word contributes meaningful 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 simple count tool, the description states the core function, but it is incomplete contextually. It does not specify the scope (e.g., across all accounts or a specific portfolio), nor does it mention that the return is a numeric value (though implied). Given the lack of an output schema, a bit more detail (e.g., 'returns a non-negative integer') would improve completeness.
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 has 0 parameters, and the schema confirms this with an empty properties object. Per the baseline rule for 0-param tools, a score of 4 is appropriate. There is no parameter ambiguity to clarify.
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 'Get the count of unread notifications' clearly states the specific verb 'get' and resource 'count of unread notifications'. The word 'count' distinguishes it from sibling tool 'get_notifications', which likely returns the list itself. The purpose 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?
The description implies usage when a simple count is needed rather than the full notification list, but it does not explicitly state this or mention alternatives. There is no 'use this when' or 'prefer get_notifications for details' guidance, so it is only implicitly conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersB
List orders for a portfolio
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return | |
| offset | No | Offset for pagination | |
| status | No | Filter by status (e.g. OPEN, FILLED, CANCELED) | |
| portfolioId | Yes | Portfolio ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior but only says 'List orders'. It omits pagination, sorting, whether open orders only, and other behavioral traits. The read-only nature is implied but not explicit.
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 concise sentence with no filler words. It is appropriately sized for a simple listing 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?
The description lacks important context about the response format (no output schema) and behavioral defaults. It does not specify whether it returns all orders or only a subset, nor does it mention pagination behavior, making it incomplete for an agent.
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 input schema provides complete descriptions for all four parameters (100% coverage). The description adds no parameter-specific information, so it relies on the schema, which is sufficient.
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 clearly states the action (list) and resource (orders) with a scope (for a portfolio). It differentiates from siblings like get_order (single order) and get_order_fills (fills).
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 is provided on when to use this tool versus alternatives such as get_order or get_order_fills. It does not clarify whether it returns all orders or only open ones, nor does it mention the filtering/pagination capabilities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_orderB
Place a new order (market, limit, or swap)
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | Order side | |
| size | Yes | Order size as decimal string | |
| type | Yes | Order type | |
| price | No | Limit price (required for LIMIT orders) | |
| instrument | Yes | Instrument symbol (e.g. btc/usd.spot) | |
| portfolioId | Yes | Portfolio ID | |
| timeInForce | No | Time in force |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It merely says 'Place a new order' without explaining execution behavior, error conditions, side effects, or required permissions, which is especially inadequate for a mutation 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?
The description is a single, front-loaded sentence with zero filler. It is as concise as possible while still conveying the essential purpose.
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?
Despite having 7 parameters and no output schema, the description provides minimal context. It does not explain return values, business logic, or special behaviors like how swaps differ from market/limit orders, leaving the agent to infer critical 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 100%, so the schema already documents all parameters. The description adds no extra parameter meaning beyond echoing the 'type' enum in the parentheses, which the schema already lists.
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 clearly states the action ('Place a new order') and enumerates order types (market, limit, or swap), making it easy to distinguish from sibling tools that retrieve data or cancel orders.
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 is provided on when to use this tool versus alternatives like cancel_order or get_order. It does not mention when each order type is appropriate, nor any exclusions or prerequisites.
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.
16 tool updates
v1.0.0- First observed
cancel_order - First observed
get_candles - First observed
get_deposit_address - First observed
get_deposits - First observed
get_instruments - First observed
get_notifications - First observed
get_order - First observed
get_order_fills - First observed
get_portfolio_assets - First observed
get_portfolio_ledger - First observed
get_portfolios - First observed
get_prices - First observed
get_swap_liquidity - First observed
get_unread_count - First observed
list_orders - First observed
place_order
TDQS
Scored across 16 tools
Each tool targets a distinct resource (portfolios, ledger, assets, orders, instruments, notifications, etc.), with clear boundaries. The only potential overlap is get_notifications vs. get_unread_count, but they are distinctly a list vs. a count, so there is no real ambiguity.
All tool names follow a consistent snake_case verb_noun pattern (get_*, place_order, cancel_order, list_orders). The few non-get_ prefixes are still action-based and consistent with the overall style, with no mixing of camelCase or other conventions.
The 16 tools are at the upper edge of a well-scoped set, but each one serves a distinct purpose and contributes to the trading/portfolio domain. The count is slightly high but not excessive, and no tools feel redundant or trivial.
The tool surface covers the core trading workflow well: portfolio management, order lifecycle, market data, and notifications. However, there are notable gaps such as order modification and withdrawal functionality, which are common in trading platforms and would be expected for full lifecycle coverage.
Maintenance
Related MCP Connectors
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
MCP server exposing the Backtest360 engine API as tools for AI agents.
Trade across 22+ exchanges and brokers from any MCP-capable AI agent, no install required.
Trade 16 crypto exchanges + MetaTrader 5 from your AI assistant via one MCP connection.
Related MCP Servers
AlicenseCqualityCmaintenanceAn MCP server providing unified access to blockchain operations, bridging, swapping, and crypto trading strategies for AI agents.37179GPL 3.0- AlicenseNot gradedqualityDmaintenanceAgent-native, self-hosted MCP server for crypto trading and DeFi management. Enables agents to query balances, execute trades, and manage positions with a policy engine and secure key storage.7Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server that provides AI agents with financial tools including real-time quotes, backtesting, technical analysis, and multi-exchange data via a simple CLI interface.1MIT
- AlicenseAqualityAmaintenanceThis MCP server connects AI assistants to a Public.com brokerage account, enabling natural language trading of stocks, options, and crypto, along with portfolio management, quotes, and orders.3765Apache 2.0