MCP Trading for Vietnam Securities Market
mcp-trading
English: Local MCP server (stdio) for trading Vietnamese stocks on DNSE, SSI and TCBS from Claude or any MCP client. Broker API keys stay on your machine (
~/.algolab, chmod 600) and requests are signed locally from your own IP. 9 tools:bridge_status,get_broker_accounts,get_broker_balance,get_broker_positions,get_broker_orders,request_broker_otp,submit_broker_otp,place_broker_order,cancel_broker_order. Orders are always two-step (preview → explicit confirm). Link a broker withnpx -y github:algolabx/mcp-trading link, then addnpx -y -p github:algolabx/mcp-trading mcp-trading-serverto your MCP client. For Vietnamese market data (prices, financials, broker research, macro) use the hosted Algolab MCP. License: MIT.
MCP server chạy trên máy bạn để giao dịch chứng khoán Việt Nam (DNSE · SSI · TCBS) ngay trong Claude Code / Claude Desktop — khoá API nằm nguyên trên máy bạn:
Khoá lưu tại
~/.algolab/mcp-broker.json(chmod 600) — không đi qua chat AI, không qua server bên thứ ba.Ký/gọi request local từ chính IP của bạn — không cần relay/VPN (DNSE HMAC V2, TCBS JWT, SSI V3 OAuth).
Phạm vi: DNSE · SSI · TCBS đều đầy đủ (đọc + đặt/huỷ lệnh, ký/gửi local). SSI ký lệnh bằng keypair sinh trên máy bạn — dán public key vào iBoard một lần.
Lệnh tiền luôn 2 bước: AI chỉ nhận bản xem trước, bạn xác nhận rõ ràng thì lệnh mới được gửi.
Không cần tài khoản npm hay GitHub để dùng — cài thẳng từ GitHub bằng npx.
Cách 1 — cài nhanh bằng npx (khuyên dùng)
Liên kết CTCK (chạy trong terminal của bạn — KHÔNG dán khoá vào chat AI):
npx -y github:algolabx/mcp-trading link # hỏi chọn DNSE / SSI / TCBS rồi nhập khoá
npx -y github:algolabx/mcp-trading link dnse # API Key + Secret (webtrading DNSE → LightSpeed API) + email OTP
npx -y github:algolabx/mcp-trading link ssi # ConsumerID + Secret + tiểu khoản; sinh keypair → dán public key iBoard
npx -y github:algolabx/mcp-trading link tcbs # API Key iFlash (app TCInvest) — tiểu khoản tự phát hiện sau iOTP
npx -y github:algolabx/mcp-trading status # xem trạng thái (không bao giờ in khoá)Khai báo với Claude Code — thêm vào ~/.claude.json:
{
"mcpServers": {
"mcp-trading": {
"command": "npx",
"args": ["-y", "-p", "github:algolabx/mcp-trading", "mcp-trading-server"]
}
}
}Restart Claude — nhóm tool bridge_status, get_broker_*, place_broker_order… xuất hiện.
Related MCP server: FeedOracle Risk MCP
Cách 2 — clone repo
git clone https://github.com/algolabx/mcp-trading.git && cd mcp-trading && npm install
node src/cli.js link dnse~/.claude.json: { "command": "node", "args": ["<đường-dẫn>/mcp-trading/src/index.js"] }.
Tool
Tool | Việc | Cần OTP? |
| Trạng thái liên kết cả 3 CTCK (không bao giờ in khoá) | — |
| Đọc tài khoản (tham số | DNSE: không · SSI: OTP 1 lần rồi tự refresh · TCBS: iOTP/8h |
| Mở phiên theo từng CTCK | — |
| Lệnh thật DNSE/TCBS, 2 bước xem trước → | Có |
An toàn
Không có tool nào nhận hay trả khoá — kênh duy nhất đưa khoá vào là CLI trên terminal của bạn.
Request đi thẳng máy bạn → CTCK qua HTTPS; bridge không gọi về bất kỳ máy chủ nào của Algolab.
Thu hồi bất kỳ lúc nào:
unlink dnse(xoá khỏi máy) và/hoặc thu hồi key tại CTCK (chết toàn cục).Test:
npm test(chữ ký HMAC, quyền file 600, chuẩn hoá chiều lệnh).
Nguồn
Bridge này là Tầng C của thiết kế bảo mật "Két Ba Tầng" của Algolab — xem tài liệu tại mcp.algolab.vn/trading. MIT License.
Available Tools
9 toolsbridge_statusARead-onlyIdempotent
Trạng thái bridge local: CTCK nào đã liên kết trên máy này, phiên nào còn hạn. Khoá KHÔNG bao giờ hiển thị; liên kết/thu hồi chỉ qua CLI mcp-trading trong terminal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it guarantees keys are never shown, clarifies the status is local to this machine, and limits the tool to status observation. This complements the readOnlyHint and idempotentHint annotations without contradicting them.
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 two concise sentences with the core purpose front-loaded. The second sentence earns its place by adding a security-relevant limitation and directing disruptive operations elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only status tool with strong safety annotations, the description is complete: it states what status information is provided, that secrets are never exposed, and where to perform related mutating operations. No critical guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to clarify. The baseline of 4 applies because the schema already fully covers the parameter surface and no compensation 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 tool reports local bridge status: which securities firms are linked on this machine and which sessions remain valid. This is a specific read-only resource query and is clearly distinct from the broker order/account 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?
The description explicitly states what this tool is not for: it never displays keys, and linking/revoking is only done via the CLI tool `mcp-trading`. This provides a clear when-not-to-use boundary, though it does not explicitly name alternative MCP tools for checking status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_broker_orderADestructive
Huỷ một lệnh theo order_id (DNSE, SSI, TCBS). Cũng 2 bước: không confirm → preview; confirm=true mới gửi.
| Name | Required | Description | Default |
|---|---|---|---|
| broker | No | dnse | |
| market | No | STOCK | |
| account | No | ||
| confirm | No | ||
| order_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: it reveals a preview-then-confirm workflow and that the cancellation is only submitted when confirm=true. This complements the destructiveHint=true annotation without contradicting it, though it does not describe side effects, error cases, or authorization requirements.
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 short and front-loaded with the core action, followed by the confirmation workflow. It is efficient, though the word 'Cũng' (also) assumes some shared context and the preview behavior is not fully elaborated.
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 destructive cancellation tool, the description covers the essential flow and the confirm requirement, and annotations cover the destructive nature. However, with no output schema, it does not describe what the preview returns, and it leaves broker/market/account selection ambiguous, which an agent may need to invoke the tool correctly in different contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the five parameters. It explains order_id and the confirm preview/send behavior, and mentions broker names, but it does not clarify the meaning or usage of broker, market, or account parameters, which are left entirely to the schema enums and names.
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: 'Huỷ một lệnh theo order_id' (cancel an order by order_id), with a specific verb and resource. It also names the supported brokers (DNSE, SSI, TCBS), but it does not explicitly differentiate from sibling tools; the distinction is inferred from the verb 'cancel' versus siblings like place/get.
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 clear usage context by explaining the two-step confirmation flow: without confirm it previews, and with confirm=true it actually sends. It does not explicitly mention when to use this tool versus alternatives or state exclusions, but the confirmation guidance is directly actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_broker_accountsBRead-onlyIdempotent
Danh sách tiểu khoản tại một CTCK (gọi thẳng từ máy user).
| Name | Required | Description | Default |
|---|---|---|---|
| broker | No | dnse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds the meaningful execution-environment constraint that the tool must be called directly from the user's machine, which is not in the annotations. It doesn't mention auth or output details, but the safety profile is already covered.
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 no filler. The essential resource and a key execution constraint are front-loaded.
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 read-only one-parameter tool, the description plus annotations cover the safety and execution context, but the broker parameter is left entirely to the schema and there is no guidance on expected output or when to use this vs sibling account-related tools. It is adequate 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 0%, and the description does not mention the 'broker' parameter or its allowed values (dnse/ssi/tcbs) or default. The phrase 'tại một CTCK' weakly alludes to the broker dimension, but the description adds no real semantic value beyond the schema's enum and default.
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 clear verb ('Danh sách' = list) and resource ('tiểu khoản tại một CTCK' = sub-accounts at a brokerage), which distinguishes it from sibling balance/position/order tools. However, it doesn't explicitly name sibling alternatives or specify that the broker parameter selects the brokerage, so it stops short of full differentiation.
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 usage hint is 'gọi thẳng từ máy user' (call directly from the user's machine), which gives execution context but no explicit when-to-use vs alternatives like get_broker_balance or get_broker_orders. There are no exclusions or conditions for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_broker_balanceBRead-onlyIdempotent
Tiền mặt / sức mua của một tiểu khoản.
| Name | Required | Description | Default |
|---|---|---|---|
| broker | No | dnse | |
| account | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is well covered. The description adds the data semantics of cash/buying power but discloses nothing about defaults, authentication, or failure behavior.
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 short, front-loaded noun phrase with no filler or repetition. It is efficient, though its brevity also reflects the lack of usage and parameter guidance elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only balance tool with strong annotations and schema-provided defaults, the description conveys the core return concept. However, without usage guidance, explicit parameter semantics, or an output schema, the agent is left to infer several details needed for a fully informed call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only vaguely ties the result to 'một tiểu khoản' (a sub-account). It does not explain the broker enum/default, whether account is required, or what happens when account is omitted; the schema's enum and default only partially help.
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 returned data as cash/buying power of a sub-account, which separates it from sibling tools for accounts, positions, and orders. It is clear but relies on the tool name for the verb 'get' and does not explicitly state the action.
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 given on when to use this tool versus alternatives like get_broker_accounts, get_broker_positions, or get_broker_orders. There is no mention of use cases such as checking available funds before placing an order, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_broker_ordersCRead-onlyIdempotent
Sổ lệnh trong ngày của một tiểu khoản.
| Name | Required | Description | Default |
|---|---|---|---|
| broker | No | dnse | |
| market | No | STOCK | |
| account | 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 the safety profile is covered. The description adds the 'daily' scope and 'per sub-account' context, which is useful. However, it does not disclose behavior like whether it returns only filled orders, whether it includes cancelled orders, or whether it requires an account parameter. No contradiction with annotations.
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 short sentence, which is concise, but it is under-specified. It is front-loaded with the main subject, but it lacks the detail needed to be genuinely useful. It is not verbose, but it does not earn its place as a complete tool description.
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 has 3 parameters, no output schema, and no parameter descriptions, the description is incomplete. An agent cannot tell what the return format is, whether pagination exists, or how to interpret the order book. The annotations cover safety but not usage context. The description should at least mention that it lists orders for a sub-account and possibly that it is read-only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only mentions 'một tiểu khoản' (a sub-account), which maps to the 'account' parameter. It does not explain the 'broker' enum (dnse/ssi/tcbs) or the 'market' enum (STOCK/DERIVATIVE), nor does it clarify that account is optional or how it defaults. The description adds minimal meaning 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?
The description 'Sổ lệnh trong ngày của một tiểu khoản' (Vietnamese for 'Daily order book of a sub-account') states a specific resource (orders) and scope (daily, per sub-account), but it is vague about the action: it does not explicitly say 'get' or 'list' orders, and it does not distinguish itself from sibling tools like cancel_broker_order or place_broker_order. The title 'Order book' helps slightly, but the description alone is not fully clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention that it is read-only, that it returns today's orders, or that it should be used before placing/cancelling orders. Sibling tools like get_broker_positions and get_broker_accounts exist, but no differentiation is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_broker_positionsCRead-onlyIdempotent
Danh mục đang nắm giữ của một tiểu khoản.
| Name | Required | Description | Default |
|---|---|---|---|
| broker | No | dnse | |
| market | No | STOCK | |
| account | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds a little context by framing the result as a current snapshot scoped to a sub-account, but it does not mention response behavior, defaults, or operational caveats.
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 compact line with no filler or repetition, and the key term is front-loaded. It is concise, though the brevity leaves important context to be supplied by the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three optional parameters and no output schema, this fragment leaves invocation details unexplained: expected return structure, market/broker semantics, and default sub-account behavior. It tells an agent the general subject but not enough to invoke confidently without external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate for broker, market, and account. It only hints that account is a sub-account and provides no meaning for the STOCK/DERIVATIVE market values or broker enums.
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 as the current holdings/portfolio of a sub-account, which matches the 'positions' domain and is conceptually distinct from balance or orders siblings. However, it is a noun phrase with no explicit retrieval verb and does not explicitly name a sibling to differentiate.
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 choose this tool over siblings like get_broker_balance, get_broker_orders, or get_broker_accounts. There is no context about when positions are the right resource to query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_broker_orderADestructive
Đặt lệnh THẬT (DNSE, SSI, TCBS — tất cả ký/gửi local). Nghi thức 2 bước bắt buộc: gọi lần đầu KHÔNG kèm confirm → trả preview, chưa gửi gì; đọc lại cho người dùng, CHỜ họ xác nhận rõ ràng rồi mới gọi lại với confirm=true. Không tự ý xác nhận thay.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | BUY/SELL (nhận cả NB/NS/MUA/BÁN) | |
| price | No | ||
| broker | No | dnse | |
| market | No | STOCK | |
| symbol | Yes | ||
| account | No | ||
| confirm | No | ||
| quantity | Yes | ||
| order_type | No | LO |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=false), the description discloses the critical two-step behavior: the first call is non-destructive and sends nothing, while the second call actually submits the order. It also notes local signing/submission and forbids autonomous confirmation, adding substantial behavioral 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?
The description is compact and front-loaded with the most important fact ('real order'), followed by the mandatory protocol. Every sentence adds necessary operational guidance without padding.
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 covers the essential safety-critical two-step protocol, which is the most important context for a destructive order tool. However, with 9 parameters and no output schema, it leaves gaps around preview content, order_type/price behavior, account requirements, and potential OTP/auth prerequisites.
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 11%, so the description must compensate for under-documented parameters. It explains the confirm parameter's role well, but does not clarify symbol, side, quantity, price, broker, market, account, or order_type semantics. Most parameters remain dependent on schema names/defaults for meaning.
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 places REAL orders ('Đặt lệnh THẬT') across DNSE, SSI, and TCBS, and distinguishes it from read-only/cancellation siblings by emphasizing the live, signed, locally-submitted nature. The 2-step confirm protocol further clarifies the tool's specific role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit invocation guidance: call first without confirm to get a preview, wait for explicit user confirmation, then call again with confirm=true. It also warns not to auto-confirm. It does not name alternative tools explicitly, but the protocol is clear enough for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_broker_otpA
Nhờ CTCK gửi OTP mở phiên. DNSE: OTP email (chỉ cần cho đặt/huỷ lệnh; có Smart OTP thì bỏ qua). SSI: gửi theo 2FA đã đăng ký — cần một lần cho cả đọc, sau đó refresh tự gia hạn. TCBS: không gửi gì — iOTP sinh trong app TCInvest, nộp thẳng submit_broker_otp.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| broker | No | dnse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: it explains that DNSE sends email OTP, SSI sends via 2FA, and TCBS sends nothing (iOTP generated in-app). It also notes SSI's OTP validity and renewal behavior. This adds valuable context not present in the annotations, which only indicate non-read-only, non-destructive, and non-idempotent.
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 front-loads the purpose in the first sentence and then provides structured per-broker details. It is somewhat verbose but each sentence earns its place by conveying broker-specific nuances. It could be more concise, but it is well-organized and not redundant.
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 request tool with two optional parameters and no output schema, the description covers the essential per-broker behavior and usage context. It does not mention what the tool returns or whether it triggers side effects like email delivery, but given the sibling tools and the nature of the operation, this is a minor gap. Overall it is sufficiently 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 description adds meaning to the 'broker' parameter by detailing each broker's behavior, which is not in the schema. However, it does not clarify the 'email' parameter's purpose or how it is used, leaving it ambiguous. With 0% schema description coverage, the description only partially compensates for the lack of parameter 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 action: 'Nhờ CTCK gửi OTP mở phiên' (ask broker to send OTP to open session). It specifies the verb, resource, and even differentiates broker-specific behaviors. This distinguishes it from siblings like submit_broker_otp, which is about submitting OTP, and the read-only get_* tools.
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 explicit per-broker guidance on when to use the tool: DNSE email OTP only needed for order placement/cancellation (skip if Smart OTP), SSI needed once for reads with auto-renewal, TCBS requires no request and directs the agent to submit_broker_otp instead. This clearly states when to use and when not, and names an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_broker_otpADestructive
Nộp OTP mở phiên. DNSE: trading token 8h (smart_otp=true nếu mã từ app). SSI: mở access+refresh token (đọc dùng được ngay, tự gia hạn). TCBS: JWT 8h + bridge tự phát hiện tiểu khoản.
| Name | Required | Description | Default |
|---|---|---|---|
| otp | No | ||
| broker | No | dnse | |
| smart_otp | No | ||
| transaction_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description does not need to repeat that. It adds valuable behavioral context: DNSE token lasts 8h, SSI tokens auto-renew, TCBS uses JWT 8h, and smart_otp is true if the code comes from the app. These details go beyond annotations and help the agent understand side effects. No contradiction with annotations.
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 short sentences, the main action is front-loaded, and broker-specific details are presented in a compact, scannable list. Every sentence adds value 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?
The description provides rich broker-specific behavior but omits two key contextual elements: the prerequisite of having requested an OTP (via request_broker_otp) and the origin/semantics of transaction_id, which is essential for a multi-step authentication flow. Without these, an agent might call the tool prematurely or with an incorrect transaction ID.
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 0% schema description coverage, the description must compensate. It explains smart_otp (true if code from app) and broker-specific behavior relevant to the broker parameter. However, it does not explain the otp or transaction_id parameters, which are critical for the operation. The description covers some parameters but leaves others ambiguous, requiring the agent to infer from context.
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 verb and resource: 'Nộp OTP mở phiên' (Submit OTP to open session). It also provides broker-specific outcomes (DNSE 8h token, SSI auto-renew, TCBS JWT), which distinguishes it from its sibling request_broker_otp that requests the OTP. The purpose is unambiguous and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives broker-specific context on what happens after submission (token lifetimes, smart_otp flag), implying this tool is used after receiving an OTP. However, it does not explicitly state when to use this tool versus alternatives (e.g., after request_broker_otp) or what conditions might make it inappropriate. The usage is implied but not fully explicit.
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.
9 tool updates
v0.3.2- First observed
bridge_status - First observed
cancel_broker_order - First observed
get_broker_accounts - First observed
get_broker_balance - First observed
get_broker_orders - First observed
get_broker_positions - First observed
place_broker_order - First observed
request_broker_otp - First observed
submit_broker_otp
TDQS
Scored across 9 tools
Each tool targets a distinct operation: placing/canceling orders, retrieving accounts/balance/positions/orders, OTP request/submit, and bridge status. No overlapping purposes; descriptions are clear and mutually exclusive.
Most tools follow a consistent verb_noun pattern (get_broker_*, place_broker_order, cancel_broker_order, request_broker_otp, submit_broker_otp). The exception is 'bridge_status', which uses noun_verb but still communicates its purpose clearly; overall naming is predictable.
9 tools is well-scoped for a trading server covering order lifecycle, account queries, and authentication. Each tool earns its place without redundancy or unnecessary sprawl.
The set covers core trading workflows: placing, canceling, listing orders, viewing positions/balance/accounts, and OTP-based session management. Minor gaps exist (e.g., no modify order, no market data) but the essential operations for executing and monitoring trades are present.
Maintenance
Related MCP Connectors
European Nucleotide Archive (ENA) — EMBL-EBI's public record of raw sequencing runs, assemblies…
Hosted DNA/RNA/protein tools: primers, oligos, PCR, cloning, CRISPR, alignment, batch & pipelines.
HLA nomenclature and match checks against a pinned IPD-IMGT/HLA release. No patient identifiers.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables DNS and email security analysis through passive and active scanning capabilities. Provides comprehensive domain security checks including SPF, DMARC, DNSSEC validation, MX record analysis, and SMTP connectivity testing.MIT
- AlicenseNot gradedqualityDmaintenanceStablecoin risk intelligence MCP — 13 tools covering CCI concentration risk, reserve drift, depeg probability, and risk scoring for RLUSD, USDT, USDC, EURC. Real-time monitoring with SAFE/CAUTION/AVOID verdicts. MiCA Art.25/35 relevant.MIT
- AlicenseAqualityAmaintenance420+ deterministic fintech tools - agentic payments (AP2, x402, Visa TAP, A2A), AML/KYC, BaaS comparison, MCP dev tooling - with 15 flagship tools as interactive MCP Apps widgets. Read-only, no auth, zero PII.162MIT
- AlicenseAqualityCmaintenanceComprehensive DNS security toolkit for AI agents: 103 tools across 13 categories including DNSSEC validation, subdomain takeover detection, email security audit, and more, all running locally with no external API calls required.10078 npm7MIT