Skip to main content
Glama
sdrom2008

Synerixis Ops MCP

by sdrom2008

Synerixis Ops MCP

跨境电商 · 智能客服工作台(stdio MCP)

Lightweight remote MCP shell for Synerixis merchant inbox ops.
极简远程 MCP 壳:不挂本地数据库,不包含 Synerixis 业务源码;所有数据经正式 API。

本仓继续提供 stdio(本机 Claude Desktop / Cursor)。手机 / 云端 Grok Bot 请用远程 HTTPS MCP(见下方),不必跑本进程。


English

What this is

A thin Model Context Protocol server that lets an external assistant list conversations, read order context, save drafts, and send replies after the host approves the tool call.

Heavy lifting stays on the Synerixis API:

https://api.synerixis.com/api/ops-mcp/v1

Write tools are marked destructiveHint. This process does not open a confirm dialog and does not set confirm for the model. The Synerixis API still rejects a write unless confirm is true, and it writes an audit row for the attempt and the result.

What this is not

  • Not the Synerixis main product repo

  • No local DB / Redis / queue

  • No marketplace plugin install

  • No autosend, refunds, logistics writes, or secrets. The client refuses those HTTP paths, and the API returns 403 for the same routes.

Who this is for (beta)

Independent Shopify sellers and Amazon sellers running customer support through Synerixis. Public beta — still testing. Expect rough edges; feedback: support@synerixis.com.

Phone / cloud Grok Bot cannot reach localhost stdio. Use the hosted Streamable HTTP endpoint:

  1. In Grok Bot: Add this MCP server → URL
    https://api.synerixis.com/api/ops-mcp/v1/mcp

  2. When the secure card appears, paste your sxk_ API Key
    (Synerixis merchant console → Connections → enable external assistant → Generate).

  3. Done — the Bot can list inbox threads, read order context, and send only after you approve destructive tool calls.

Auth: Authorization: Bearer sxk_… (or X-Api-Key). v1 is stateless JSON (no SSE session).
Do not put the key in the URL or in this repo.

Cursor / desktop remote example (mcp.json):

{
  "mcpServers": {
    "synerixis-ops": {
      "url": "https://api.synerixis.com/api/ops-mcp/v1/mcp",
      "headers": {
        "Authorization": "Bearer sxk_xxxxxxxx"
      }
    }
  }
}

stdio (below) still works for Claude Desktop / local Cursor.
Listed on cursor.directory. Root ships .mcp.json (stdio) + skills/synerixis-ops-inbox/SKILL.md. See also REMOTE.md and AUTH.md.

stdio (Claude Desktop / Cursor / any MCP host)

git clone https://github.com/sdrom2008/synerixis-ops-mcp.git
cd synerixis-ops-mcp
npm install
npm run build
{
  "mcpServers": {
    "synerixis-ops": {
      "command": "node",
      "args": ["/absolute/path/to/synerixis-ops-mcp/dist/index.js"],
      "env": {
        "SYNERIXIS_OPS_MCP_API_KEY": "sxk_xxxxxxxx"
      }
    }
  }
}

The process reads only SYNERIXIS_OPS_MCP_API_KEY. It does not fall back to SYNERIXIS_API_KEY.
Optional SYNERIXIS_OPS_MCP_BASE_URL must be https on api.synerixis.com. A local API needs SYNERIXIS_OPS_MCP_ALLOW_INSECURE_LOCAL=1 and http://localhost or http://127.0.0.1.

Tools

Tool

Purpose

list_stores

Connected stores

list_conversations

Inbox list (storeId, status, limit, offset)

search_conversations

Search by order number or buyer email (q, optional storeId/limit/offset)

get_conversation

Conversation detail

list_messages

Messages (limit, offset)

get_order_context

Order context for this conversation's platform and store

list_pending_ai_replies

AI drafts awaiting confirm

get_quota

AI resolve points

list_agents

Agents/seats (id, display name, available) for assign

save_draft

Save draft (no send)

send_message

Send. Host approval + confirm=true. Idempotency key.

approve_ai_reply

Send one AI draft (draftId when several exist)

reject_ai_reply

Discard one AI draft and store reason

assign_conversation

Assign. Body sends agentId

update_conversation_status

resolved, reopen, or closed

Suggested flow: search_conversations or list_conversations → list_messages / get_order_context → save_draft; call list_agents before assign_conversation.

Auth

See AUTH.md. Keys look like sxk_ plus hex. This repo never stores tenant secrets.

License

MIT


Related MCP server: agentinbox-mcp

中文

这是什么

面向商家的轻量 MCP(stdio + 远程 HTTPS)。外部助手可以列会话、看订单、存草稿,并在宿主批准这次工具调用之后发送。

重活仍在正式 API:https://api.synerixis.com/api/ops-mcp/v1
本仓 无本地数据库;远程协议面在 api.synerixis.com,本仓仍提供 stdio 壳与文档。

写工具带 destructiveHint。本进程不弹出确认框,也不会替模型填上 confirm。API 仍拒绝 confirm 不是 true 的写操作,并记下审计。

给谁用(内测)

面向用 Synerixis 做客服的 Shopify / Amazon 独立卖家。目前测试中,功能还在打磨;问题请发 support@synerixis.com。

在 Grok Bot 里怎么用(推荐)— 远程 HTTPS

手机 / 云端 Grok 到不了本机 stdio,请用托管 Streamable HTTP:

  1. Grok Bot:添加 MCP 服务器 → URL
    https://api.synerixis.com/api/ops-mcp/v1/mcp

  2. 安全卡填入商家台 连接 页生成的 sxk_ Key(先打开「允许外部助手」)。

  3. 连上后即可看收件箱、订单上下文;发送类操作须你在宿主侧批准。

鉴权:Authorization: Bearer sxk_…。v1 无状态 JSON(无 SSE Session)。
禁止把 Key 写进 URL 或本仓。stdio 装法见上方 English,仍保留给本机宿主。详见 REMOTE.md、AUTH.md。

本地 stdio

见上方 English。环境变量只用 SYNERIXIS_OPS_MCP_API_KEY(sxk_ 开头)。不要依赖 SYNERIXIS_API_KEY。

硬禁

客户端会拒绝这些请求,API 对同一路径返回 403:自动发送、退款、物流写入、读取密钥。

鉴权

见 AUTH.md。

开源协议

MIT

Available Tools

15 tools
approve_ai_replyB
Destructive

Approve one pending AI draft and send it. Pass draftId when more than one draft is waiting. Host must approve. confirm is not set by this client.

NameRequiredDescriptionDefault
confirmYes
draftIdNoRequired when several actionable drafts exist
conversationIdYes
idempotencyKeyNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose destructive=true, openWorld=true, and non-idempotent behavior. The description adds the useful authorization constraint ('Host must approve') and the multiple-draft nuance, but 'confirm is not set by this client' is cryptic and leaves the approval confirmation model unclear for a destructive action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the action, and each sentence is brief. The final sentence about confirm is terse to the point of ambiguity, slightly undermining the otherwise efficient structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent approve-and-send operation with no output schema and low parameter documentation, the description covers purpose and authorization but leaves key semantics (confirm, idempotencyKey, behavior on already-approved drafts, result of the call) unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25%: only draftId is documented. The description restates the draftId conditionality but says nothing meaningful about conversationId, idempotencyKey, or what confirm controls; the confirm sentence is more confusing than clarifying.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Approve one pending AI draft and send it.' It is clearly distinguishable from reject_ai_reply and send_message by intent, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pass draftId when more than one draft is waiting' and 'Host must approve' give practical invocation context. But there is no guidance on when to use this instead of reject_ai_reply or send_message, and no stated preconditions beyond host approval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

assign_conversationA
Destructive

Assign a conversation to an agent. Call list_agents first for assigneeId. 先 list_agents 取坐席 id。Sends agentId (assigneeId is the same value). Host must approve.

NameRequiredDescriptionDefault
confirmYes
assigneeIdYesAgent id
conversationIdYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true and non-idempotency, so the safety profile is covered. The description adds the host-approval gate and the wire-field note ('Sends agentId'), but never says what happens to the previously assigned agent or what 'confirm' actually authorizes — the most important consequence for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded, but the Chinese sentence '先 list_agents 取坐席 id' is a verbatim duplicate of the preceding English instruction, and the 'agentId (assigneeId is the same value)' aside adds ambiguity rather than clarity. Two of four sentences do redundant work.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-required-param destructive mutation with no output schema, the definition covers the id-sourcing and approval prerequisites, which is the minimum. It leaves the reassignment side effect, the confirm contract, and any failure/return behavior unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% — only assigneeId is documented in the schema, and the description usefully tells the agent where to source it. conversationId and confirm are undocumented in both places; 'Host must approve' hints at confirm's role but never states what it does or whether a false value aborts the call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource: 'Assign a conversation to an agent.' That is enough to separate it from siblings like update_conversation_status or send_message, though it never explicitly names an alternative to contrast against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a concrete prerequisite ('Call list_agents first for assigneeId') and a gating condition ('Host must approve'), which is real routing guidance. It stops short of saying when not to use it or which sibling to pick when the conversation is already assigned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_conversationC
Read-only

Get one conversation detail by id.

NameRequiredDescriptionDefault
conversationIdYesConversation id

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond that, with no mention of error behavior for unknown ids, permission requirements, or what 'detail' comprises.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with zero padding, exactly matched to the tool's scope. It is terse to the point of being thin, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required parameter, full schema coverage, annotations present), so little is strictly required. But with no output schema, the description gives no indication of what the 'detail' response contains or how large it may be, leaving an agent to call blind on the return side.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, so the baseline is 3. The phrase 'by id' is consistent with conversationId but adds no format, validation, or sourcing guidance (e.g., where to obtain the id) beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (conversation detail) scoped by id, which is clear enough to distinguish from mutations like update_conversation_status. However, it never distinguishes itself from sibling reads such as list_conversations, search_conversations, or list_messages, despite those being the closest alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus search_conversations or list_conversations, and no note that it requires a known conversationId (so it cannot be used for discovery). Usage is only implied by the phrase 'by id'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_order_contextC
Read-only

Get order / logistics context linked to a conversation (read-only).

NameRequiredDescriptionDefault
conversationIdYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description's '(read-only)' merely repeats the annotation and adds no further behavioral context such as what data is returned, whether missing orders produce errors, or any access constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. However, its brevity contributes to the missing usage and behavioral detail rather than purely optimizing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only tool with annotations covering safety, the description is minimally adequate. But with no output schema, it should say more about what 'order / logistics context' includes or what happens when no linked order exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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. It only implies that the sole parameter identifies a conversation; it does not clarify the ID format, where to obtain it, or whether it must come from list_conversations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get') and resource ('order / logistics context') scoped to a conversation. It is distinguishable from the sibling conversation/message tools by its order/logistics focus, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus get_conversation or other siblings. The only contextual cue is that the data is 'linked to a conversation', leaving usage conditions to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_quotaA
Read-only

Get AI resolve-point balance for this merchant.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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 only the merchant scoping; it does not mention freshness, caching, or whether the balance is real-time.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence that front-loads the verb and resource with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only lookup with annotations covering safety, the description provides enough to call it correctly. It could say slightly more about the returned balance (units/currency timing), but no output schema exists and nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is trivially complete, so the baseline is 4. The description correctly implies no inputs are required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (get AI resolve-point balance) and scopes it to the merchant. No sibling tool deals with quota, so it is effectively distinguishable, though it does not explicitly contrast with siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource (fetch the balance), but there is no explicit when-to-use guidance or mention of alternatives. Given zero sibling overlap this is adequate but thin.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_agentsA
Read-only

List this merchant's agents/seats (id, displayName, isActive/isAvailable) for assign_conversation. 列出本店坐席(id、显示名、是否可用),供分派会话选用。Does not expose secrets or emails.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, so safety is covered; the description adds a genuine payload guarantee beyond them ('Does not expose secrets or emails') that tells the agent the output is safe to relay. It does not mention pagination, ordering, or size limits, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, fields, and consumer tool in one compact statement, and the privacy note is short. The fully duplicated Chinese sentence is redundant for a single-language consumer and is the only real waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description supplies the return fields and a data-sensitivity guarantee, which is most of what an agent needs. Missing only minor operational detail such as whether the list is paginated or sorted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. The field list it provides describes output, which the schema does not cover.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('List this merchant's agents/seats') with an explicit inventory of returned fields (id, displayName, isActive/isAvailable) and the downstream consumer (assign_conversation). No other sibling lists agents, so the resource is unambiguous against list_stores, list_conversations, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'...for assign_conversation' gives a clear retrieval-then-assign workflow context, which is exactly how an agent would select this tool. It stops short of stating when not to use it or naming any alternative, but no plausible alternative exists in the sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conversationsB
Read-only

List inbox conversations. Optional filters: storeId, status, limit, offset. storeId is a connection id or the store open id. offset is a non-negative page offset.

NameRequiredDescriptionDefault
limitNoPage size
offsetNoNumber of rows to skip
statusNoSession status, or open for not resolved/closed
storeIdNoPlatform connection id, open id, or shop id

TDQS

B3.2/5.0
Behavior3/5

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 pagination behavior (limit/offset paging) but says nothing about ordering of results, default page size, or whether pages are stable — relevant for a paginated 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose and then the filter surface. Minor redundancy in calling offset both a "page offset" and "non-negative" while the schema already labels it rows-to-skip.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only, zero-required-param list tool with full schema coverage and annotations, this is close to sufficient. The main omission is any hint of result ordering/defaults, notable because there is no output schema to describe the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented and the baseline is 3. The description restates storeId's accepted identifier forms (matching the schema) but does add one constraint not in the schema: offset must be non-negative.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List inbox conversations") that an agent can act on directly. However, it never distinguishes itself from the sibling search_conversations, which is the exact alternative an agent will weigh when deciding how to retrieve conversations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says the filters are "Optional" but gives no when-to-use conditions, no prerequisites, and no pointer to search_conversations or get_conversation as alternatives. The agent must infer that this is the unfiltered/browse path purely from the verb "List".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_messagesC
Read-only

List messages in a conversation. offset skips from the newest page.

NameRequiredDescriptionDefault
limitNo
offsetNo
conversationIdYes

TDQS

C2.7/5.0
Behavior3/5

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 structurally. The description adds genuinely useful behavior: results are ordered newest-first and offset pages backward from the newest page. It omits default/maximum page size and what happens on out-of-range offsets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core action front-loaded. It is efficient, though the terse offset fragment leaves the reader to infer directionality details that a slightly fuller clause would have settled.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 0% schema coverage, no output schema, and no annotations on parameter behavior, the description is the only place an agent could learn page size, message object shape, or ordering guarantees, and it supplies essentially none of that. Adequate for choosing the tool, insufficient for calling it correctly on the first try.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across all three parameters, so the description must carry the load and mostly does not. It only clarifies offset semantics (skips from the newest page); limit has no default, maximum, or units documented, and conversationId's source is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"List messages in a conversation" states a verb and resource, but it largely restates the tool name; the only added nuance is the conversation scoping. There is no differentiation from siblings like get_conversation or search_conversations, which an agent must infer on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to use this versus get_conversation, list_conversations, or search_conversations, nor any prerequisites about the conversation state. The only guidance is the implicit ordering note in the offset sentence, which is about pagination rather than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pending_ai_repliesC
Read-only

List AI draft replies awaiting confirm before send.

NameRequiredDescriptionDefault
limitNo
offsetNo
storeIdNo

TDQS

C2.8/5.0
Behavior3/5

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 that results are AI drafts awaiting confirmation, but says nothing about ordering, pagination behavior, or what a draft record contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words, which is good. However, the brevity crosses into under-specification given three undocumented parameters and no usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameter documentation, the description carries the burden of explaining what is returned and how storeId/limit/offset shape results, and it does neither. An agent could call it, but not confidently predict the response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters (limit, offset, storeId) have 0% schema description coverage and none are mentioned in the description. The names are largely self-explanatory, but nothing clarifies whether storeId is required to scope results or how paging defaults behave.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it lists AI-generated draft replies that are awaiting confirmation before being sent. That distinguishes it from siblings like approve_ai_reply, reject_ai_reply, and list_messages, though it doesn't name those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus approve_ai_reply, reject_ai_reply, or list_messages. The pending-confirmation framing hints at a review workflow, but the agent must infer the context and any prerequisites itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_storesA
Read-only

List connected stores for this merchant tenant.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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 structurally. The description adds useful tenant scoping ('for this merchant tenant') but says nothing about result ordering, pagination, or whether empty results are possible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, and it delivers the scope constraint first. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool with full annotation coverage and no output schema, the description is nearly sufficient. Only the shape of a returned store and any ordering/empty-set behavior are left unstated, which is a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline of 4 applies. The description correctly signals that scoping comes implicitly from the tenant context rather than an argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (connected stores) plus the scoping entity (this merchant tenant). No sibling tool in the provided list overlaps with stores, so the lack of explicit sibling differentiation costs little.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to use it — retrieving the merchant's connected store set — but there is no explicit when-to-use framing or mention of prerequisites. No alternative tool competes for this job, so the omission is minor rather than harmful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reject_ai_replyB
Destructive

Discard one pending AI draft. Does not discard other drafts. Host must approve. Reason is stored on the audit row.

NameRequiredDescriptionDefault
reasonNo
confirmYes
draftIdNo
conversationIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and non-idempotent, but the description adds genuinely new behavior: the rejection is limited to a single draft, host approval is required, and the reason is persisted on an audit row. It stops short of saying whether the draft is permanently removed or recoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short declarative sentences with the scope constraint front-loaded and no filler. The terse fragment style ('Host must approve.') is efficient though slightly ambiguous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema and zero schema description coverage, the description covers scope, approval, and audit trail but omits confirm semantics, why conversationId is required, and whether the discard is reversible. Adequate but with visible gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning, and it only clarifies 'reason' (stored on audit row) and implicitly draftId/single-draft scope. The required 'confirm' boolean and 'conversationId' get no explanation anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Discard') and resource ('one pending AI draft') with explicit scope of exactly one draft. It does not name the natural alternative, approve_ai_reply, so the agent must infer the sibling split from the wording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Does not discard other drafts' scopes the action but gives no when-to-use guidance and never mentions approve_ai_reply as the contrasting option for accepting a draft. Usage is only implied by the verb choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_draftA
Idempotent

Save or update a draft reply on a conversation. Does not send.

NameRequiredDescriptionDefault
contentYesDraft body text
conversationIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false; the description adds the key side-effect disclosure they do not cover — that no message is transmitted. It also conveys upsert semantics ("save or update"). It does not say whether an existing draft is overwritten or what permissions are needed, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, action first and the most decision-relevant constraint second. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a two-parameter write tool with annotations covering the safety profile and no output schema to explain. The only real gap is what happens to a pre-existing draft, which matters for the upsert behavior it advertises.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Two parameters with 50% schema coverage (conversationId is undocumented). The description's "draft reply on a conversation" loosely maps to both parameters but adds no format, length, or identifier details to compensate for the undocumented conversationId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource: "Save or update a draft reply on a conversation." The closing "Does not send." draws a hard scope boundary against the send_message sibling, so an agent can pick the right tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The "Does not send" clause implicitly signals when to choose this over send_message (preparing content rather than dispatching it), and "save or update" clarifies it handles both first draft and revision. It stops short of naming send_message or stating exclusions explicitly, so not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_conversationsA
Read-only

Search this merchant's conversations by order number or buyer email (q). Optional storeId/limit/offset. 按订单号或买家邮箱搜本店会话。Same summary fields as list_conversations; no secrets.

NameRequiredDescriptionDefault
qYesOrder number or buyer email (also matches customerId/name)
limitNoPage size
offsetNoNumber of rows to skip
storeIdNoPlatform connection id, open id, or shop id

TDQS

A3.5/5.0
Behavior3/5

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 two useful behavioral facts — results mirror list_conversations' summary fields and contain "no secrets" — but says nothing about pagination defaults or result caps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the search keys in the first clause, and the whole thing is two short sentences. The duplicated Chinese sentence is redundant for a monolingual consumer but adds little bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read-only search with no output schema, the definition covers purpose, keys, optional filters, and return shape by reference to list_conversations. Only the absence of explicit sibling disambiguation keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are fully documented structurally; the description only restates q plus the optional storeId/limit/offset. Baseline 3 applies since the schema carries the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Search this merchant's conversations") and the two search keys (order number, buyer email). It gestures at the sibling relationship via "Same summary fields as list_conversations," though it never explicitly contrasts the two tools' purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: search when you have an order number or buyer email. But the description never says when NOT to use it (e.g., browse with list_conversations, or fetch one thread with get_conversation), even though those siblings exist and are the obvious alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageA
Destructive

Send a reply. Destructive: the host must approve the call. confirm must already be true; this client never sets it. Audited on Synerixis. Same idempotencyKey retries the same send.

NameRequiredDescriptionDefault
confirmYesMust already be true. The client does not fill this in.
contentYes
conversationIdYes
idempotencyKeyNoOptional retry key, 8-80 letters, digits, _ or -

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/openWorld behavior, but the description adds important operational context: host approval is required, confirm is never set by the client, calls are audited, and an idempotency key controls retry behavior. These are valuable behavioral details beyond the annotations, and they do not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the action, then the destructive approval requirement, then retry semantics. Every sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive send operation with no output schema, the description covers the critical safety and retry behavior well. It is still missing return-value expectations and specifics for content/conversationId, which keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and the description reinforces confirm while clarifying that same idempotencyKey retries the same send. It does not explain content or conversationId semantics, leaving those to the agent's inference from the tool name and schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: "Send a reply." That clearly distinguishes it from sibling list/get tools, but it does not explicitly differentiate it from nearby draft/reply tools such as save_draft or approve_ai_reply.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the key prerequisite that the host must approve the call and that confirm must already be true. However, it does not say when to use this instead of save_draft or approve_ai_reply, 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.

update_conversation_statusA
Destructive

Set conversation status to resolved, reopen, or closed. Host must approve. open is not a write value.

NameRequiredDescriptionDefault
statusYes
confirmYes
conversationIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds valuable context about host approval and the invalid 'open' value, though it does not explain the destructive consequences or what 'confirm' is for.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and immediately followed by the critical approval prerequisite and value constraint. No wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with a required confirm parameter and no output schema, the description covers the approval prerequisite and valid status values but omits what confirm does, expected side effects, and whether confirmation must be true. Annotations help, but key invocation details for confirm are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It repeats the status enum and warns that 'open' is invalid, but it does not explain the required 'confirm' boolean, its relationship to host approval, or what conversationId expects.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Set conversation status') and enumerates the allowed target statuses. It is clear enough to distinguish from siblings like assign_conversation or approve_ai_reply, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an important prerequisite ('Host must approve') and clarifies that 'open' is not a valid write value. However, it gives no guidance on when to choose this tool versus related conversation-management siblings, nor any when-not-to-use conditions.

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.

  1. 15 tool updatesv0.1.0
    • First observedapprove_ai_reply
    • First observedassign_conversation
    • First observedget_conversation
    • First observedget_order_context
    • First observedget_quota
    • First observedlist_agents
    • First observedlist_conversations
    • First observedlist_messages
    • First observedlist_pending_ai_replies
    • First observedlist_stores
    • First observedreject_ai_reply
    • First observedsave_draft
    • First observedsearch_conversations
    • First observedsend_message
    • First observedupdate_conversation_status

TDQS

A3.5/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have clearly distinct purposes: conversation listing/reading, message sending, AI draft approval/rejection, assignment, and status updates are separable. The main overlap is list_conversations vs search_conversations, which both return similar summary fields and differ mainly by the optional q filter, so an agent could occasionally choose the wrong one.

Naming Consistency5/5

All tool names use consistent snake_case with predictable verb_noun structure, such as list_conversations, get_conversation, save_draft, send_message, and approve_ai_reply. No mixed conventions or vague names are present.

Tool Count5/5

Fifteen tools is well-scoped for an operations inbox server covering stores, conversations, messages, AI drafts, agents, quota, and order context. Each tool appears to earn its place without excessive surface area.

Completeness4/5

The surface covers the core lifecycle: list/search/read conversations, read messages, inspect order context, save/send replies, manage AI drafts, assign conversations, and update status. Minor gaps exist around broader agent/store management and possible read-state handling, but these are not fatal for the stated ops purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to manage Gorgias support tickets: list open tickets, read conversation history, draft internal notes, send outbound replies (gated), and look up customer history.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to retrieve customer, order, ticket, policy, and agreement information, and to prepare or execute state-changing support actions like escalations and follow-ups with confirmation and access control.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to find and read customer conversations, look up profiles, send replies, manage workspace metadata, and handle daily support workflows. It also supports triage, drafting, escalation, and handover tasks through MCP tools, prompts, and resources.
    35 npm
    1
    MIT