Skip to main content
Glama

Agent Talk MCP

Let your AI conversations work together — without the copy and paste.

English · 简体中文

Local first Node.js License: MIT

A lightweight, local MCP bridge between existing Codex Desktop / Claude Desktop Code conversations and DSH Web.


Why it exists

You discuss a task with one AI, write a plan, paste it into another AI, then copy the result back for review. Agent Talk handles that handoff while keeping the conversations in their original apps.

Use your existing Codex or Claude conversation to delegate work to DSH, receive questions and results, and decide what happens next. The bridge does not prescribe a development methodology, repository layout, or fixed planner/executor prompt. It also works for research, writing, and other local tasks.

flowchart LR
    U[You] <--> P[Existing Codex or Claude conversation]
    P <-->|MCP tools and native return messages| M[Agent Talk MCP]
    M <-->|Local DSH API| D[DSH Web conversations]
    M --- S[(Local SQLite state)]

Related MCP server: codex-chatgpt-bridge

What you can do

Capability

Behavior

Use existing conversations

Bind exact native conversation IDs and directories; continue chatting in the original apps.

Create DSH conversations

Choose an existing DSH workspace by name, or start in a local directory.

Delegate with local files

Send a prompt and absolute paths to Markdown, images, PDFs, or other material. The recipient reads the files using its own capabilities.

Receive results and questions

New DSH conversations require a return destination by default. Ordinary questions can be answered from the initiating conversation.

Inspect progress

Read recent messages, tool activity, native state, and delivery receipts.

Coordinate several tasks

Assign separate DSH conversations to independent work while keeping one initiating conversation per return route.

Pause and finish

Pause one task without pausing the others; mark reviewed work complete to prevent reuse.

Renew DSH credentials

A small DSH extension supplies the local login URL; the bridge renews its cookie when needed.

Scope: this version automatically creates DSH conversations only. It does not create replacement Codex/Claude CLI sessions, automate browser clicks, or archive conversations.

Requirements and compatibility

This is an early, source-installed release (0.4.0), intended for a trusted local machine.

  • macOS is the currently supported environment. The Claude native adapter is macOS-only; Windows/Linux support has not been validated.

  • Node.js 22.13 or later and npm. Node.js 22.23.2 was used for local verification. Node's SQLite experimental warning may appear.

  • Codex Desktop and/or Claude Desktop Code, signed in and able to run a local stdio MCP server. Regular Claude web chats are not supported by this adapter.

  • A working DSH Web installation on the same machine, with access to the same local files.

  • The native apps and the receiving conversation must remain available for automatic return.

Local verification used Claude Code 2.1.280 and DSH 0.1.7-rc.1, plus the installed Codex Desktop. These are compatibility observations, not a guarantee for every release. Native IPC and DSH RPC interfaces can change independently of MCP.

Quick start

1. Install the source

git clone https://github.com/YanZiBin/agent-talk-mcp.git
cd agent-talk-mcp
npm ci --ignore-scripts
npm run check
npm run smoke

The smoke test uses temporary state and a local mock DSH service. It does not send messages to your AI conversations.

Keep the checkout in a stable location: client configurations and the DSH extension will reference its absolute path. There is no npm package installation required; private: true intentionally prevents accidental npm publication.

2. Connect DSH and enable credential renewal

Start your existing DSH installation with dsh web. Generate the extension URL from the repository root:

node --input-type=module -e 'import { pathToFileURL } from "node:url"; import path from "node:path"; console.log(pathToFileURL(path.resolve("src/dsh-auth-plugin.mjs")).href)'

In the verified DSH version, the Web profile patch file is ~/.dsh/profiles/web/cordis.patch.yml. Back it up, then append the following item to its existing YAML patch list, replacing the example URL with the command's output. Preserve existing entries and do not add a duplicate agent-talk-auth item. If the file does not exist, create its parent directory and a file containing this list item.

- insert:
    - id: agent-talk-auth
      name: "file:///absolute/path/to/agent-talk-mcp/src/dsh-auth-plugin.mjs"

Restart DSH Web, or use its native profile reload mechanism. This is a DSH Web extension, not a second MCP server to install in DSH.

The extension obtains a login URL from DSH's own connection.authenticatedUrl, saves it privately, and checks credentials every hour. The bridge renews when the cookie has less than 12 hours left, the login URL changes, or authentication is rejected. You do not need to paste a fresh token each time DSH restarts.

If the extension is not available, save the local login URL printed by DSH into work/dsh-login-url.txt, then run:

mkdir -p work
chmod 700 work
# Save the login URL into work/dsh-login-url.txt using your editor.
chmod 600 work/dsh-login-url.txt
npm run connect:dsh < work/dsh-login-url.txt

The script does not print tokens or cookies. Do not put the login URL in shell arguments, issues, or commits. Manual login alone does not install automatic renewal; enable the DSH extension for that.

3. Register with Codex and/or Claude Code

From the repository root, in a shell where the relevant client CLI is installed:

AGENT_TALK_NODE="$(command -v node)"
AGENT_TALK_DIR="$PWD"

# Codex
codex mcp add agent-talk -- "$AGENT_TALK_NODE" "$AGENT_TALK_DIR/src/server.mjs"

# Claude Code, including its Desktop Code environment
claude mcp add --transport stdio --scope user agent-talk -- "$AGENT_TALK_NODE" "$AGENT_TALK_DIR/src/server.mjs"

Install only the entries for the clients you use. Alternatively, merge the following entry into the corresponding configuration, substituting absolute paths.

Codex — ~/.codex/config.toml:

[mcp_servers.agent-talk]
command = "/absolute/path/to/node"
args = ["/absolute/path/to/agent-talk-mcp/src/server.mjs"]

Claude Code — user-level MCP configuration:

{
  "mcpServers": {
    "agent-talk": {
      "type": "stdio",
      "command": "/absolute/path/to/node",
      "args": ["/absolute/path/to/agent-talk-mcp/src/server.mjs"]
    }
  }
}

Do not replace your entire configuration with these snippets. Restart or reconnect the clients after setup or source updates. Each client launches its own MCP process; they share local state. No separate boot-time daemon is installed. npm start is a stdio server entry point, not an interactive chat command.

4. Try it in a conversation

List the DSH workspaces available on this machine.

Then:

Create a conversation in the DSH workspace “MyProject”. Ask it to summarize the project without modifying files. Return its questions and result to this conversation, and give me your assessment.

For a development task:

Give DSH the instructions in /absolute/path/to/task.md. Use the “MyProject” workspace. Bring questions and results back here; review the result and ask for revisions as needed. Ask me when a decision is mine to make.

You normally do not need to name the MCP explicitly. The AI selects tools from their descriptions. Tool guidance currently uses Simplified Chinese and instructs clients to follow the user's language; the documentation is available in both English and Simplified Chinese.

How coordination works

  1. The initiating AI identifies its exact native conversation with talk_list and binds it with talk_bind. It must not guess from a title alone.

  2. It creates a DSH conversation with talk_create, supplying replyTo as its own bound alias. Return is enabled as part of creation; a second talk_follow call is unnecessary.

  3. It sends the task with talk_send, using a stable UUID for the request. Creation itself sends no task.

  4. DSH runs in its original conversation. New final replies, ordinary questions, abnormal endings, and direct user interventions can return to the initiator.

  5. The initiator interprets the result in the context of the user's goal. It should summarize from its own perspective, distinguish reported claims from verified facts, and quote verbatim only when requested.

  6. Revisions can continue in the same executor conversation. Once reviewed work is marked completed, use a new conversation for the next task.

autoReturn: false explicitly opts out when creating a conversation and must not be combined with replyTo. Existing DSH conversations can be bound and then linked with talk_follow; starting a follow watches new events, not the entire previous history. New defaults do not retroactively enable old routes.

Workspace names must match exactly. Missing names produce an error; duplicate names require an exact cwd. If workspaceName and cwd are both provided, they must agree. Put a separate execution/worktree path in the task instructions. Without a workspace name, cwd creates an ungrouped DSH conversation.

MCP tools

Tool

Purpose

talk_list

List native conversations, optionally filtered by exact directory.

talk_workspaces

Read existing DSH workspace names, directories, and conversation counts.

talk_bind

Bind an exact native conversation and directory to a stable alias.

talk_create

Create a DSH conversation with automatic return by default.

talk_send

Send a prompt and local file paths with request-ID deduplication.

talk_read

Read recent messages, progress, native state, questions, and return status.

talk_follow

Enable or disable a DSH → initiating conversation return route.

talk_questions

Inspect ordinary questions and permission requests.

talk_answer

Answer ordinary questions; never grant permission approvals.

talk_delivery_control

Pause, explicitly resume, or mark reviewed work complete.

talk_outbox

Inspect recent delivery receipts, route errors, and event connectivity.

Aliases accept 1–64 ASCII letters, digits, underscores, or hyphens. Request IDs must be UUIDs. File references must be existing absolute local paths.

Delivery states and stopping

State

Meaning / action

queued

Not yet sent. Busy or temporarily unavailable recipients wait in a persistent queue.

accepted

The native app accepted the message. This does not mean the task is complete or reviewed.

observed

The exact message was found in the native recipient's transcript.

held

The native recipient retained the message but has not admitted it to the model. Inspect the original client; do not resend.

sending / unknown

The outcome is unconfirmed. Inspect the conversation before taking further action; no automatic replay.

refused / unsupported

The native adapter or recipient rejected the request or lacks support.

cancelled

An unsent message was cancelled after stopping, completion, route changes, or a question being resolved.

talk_read.returnRoute shows whether return is enabled; lastReturn shows its latest receipt. A held receipt is not evidence that return is disabled. Its exact internal cause is not supplied by the receipt.

conversation.state controls bridge delivery; nativeStatus describes the native app. They are separate. Native Stop detection latches bridge delivery as paused. Explicit active resumes delivery; a correction in the native app alone does not silently resume it. Pausing DSH requests native cancellation and cancels stale queued prompts. Pausing a Codex/Claude alias gates bridge messages only, not its ongoing model turn.

Privacy, runtime, and limits

  • Local bridge, not local inference. Agent Talk adds no hosted relay or model API call of its own. The AI clients still process messages using their configured providers and permissions.

  • Private state lives in .local/: SQLite coordination state, queued message bodies, question data, and DSH credentials. Treat it as sensitive. The directory is ignored by Git; credential files use mode 600 and their directory mode 700.

  • The DSH auth adapter accepts loopback HTTP addresses only. Native IPC checks ownership and permissions. The extension does not read DSH's signing secret or change client permissions.

  • Ordinary questions can be relayed. Permission approvals remain in DSH Web. A peer message does not grant new authority.

  • Results are checked every 3 seconds; questions use a DSH event connection. Polling does not call an AI model. Receiving and processing a forwarded message can start a model turn and consume usage.

  • At least one MCP process, DSH, and the recipient must be available for return. Closing all MCP processes stops forwarding. There is no guaranteed full catch-up after a long offline period.

  • talk_send accepts up to 100,000 JavaScript string units, subject to a stricter 120,000-byte assembled message limit, and at most 30 file paths. Large material should be passed by path. Return messages do not use the same size guard, but native-client and model limits still apply.

  • Reads are bounded: up to 40 recent messages; desktop transcript reads inspect the final 2 MiB. truncated signals omitted history. Progress is recorded tool activity, not token-by-token streaming.

  • One local DSH Web instance is supported. Files are shared by absolute path, not uploaded or synchronized across machines.

  • No automatic archive, desktop conversation creation, approval bypass, or built-in Git/worktree/PR policy.

Troubleshooting

Symptom

Check

Tools are missing or descriptions are old

Reconnect/restart the client's MCP process; check its Node and script paths.

DSH cannot authenticate

Confirm DSH Web is running and agent-talk-auth is enabled. Use manual login only for recovery; never share .local/ in an issue.

Missing return destination

Bind the exact initiating conversation and pass its alias as replyTo.

DSH finished but nothing returned

Inspect returnRoute, lastReturn, and talk_outbox. Check paused/busy/unavailable recipients and held receipts before resending.

Claude target cannot be found

Open an actual Desktop Code conversation. The adapter requires a live native worker; the app window alone is not sufficient.

Workspace is missing or ambiguous

Call talk_workspaces and use its exact name; provide matching cwd for duplicates.

Message is too large

Save the material in a local document and send its path.

A stopped task does not resume

Explicitly resume with talk_delivery_control; cancelled old prompts are not automatically restored.

Development and verification

npm run check
npm run smoke

The existing smoke test covers queueing, concurrent deduplication, uncertain delivery, native Stop handling, question validation, approval refusal, workspace resolution, credential renewal, and the MCP tool contract. It also verifies Chinese guidance and default return behavior with isolated mock endpoints. It is not an exhaustive compatibility test against every desktop release.

Real local checks have exercised DSH creation/send/read, workspace selection, question/answer continuation, result return into both Codex and Claude, and credential recovery. All native Stop variants, all reconnect races, long offline catch-up, and every complete development/review workflow have not been exhaustively verified. Claude can return held depending on native behavior.

src/server.mjs           MCP tools and coordination guidance
src/adapters.mjs         Native conversation adapters
src/delivery.mjs         Persistent delivery and return polling
src/store.mjs            SQLite state and deduplication
src/dsh-events.mjs       DSH questions and approval notifications
src/dsh-auth.mjs         Private credentials and renewal
src/dsh-auth-plugin.mjs  DSH Web credential extension
src/vendor/              Adapted native IPC code and upstream license
scripts/                Manual connection and smoke checks

Contributions are welcome. Keep changes focused, preserve native permission boundaries and no-replay behavior, and run the existing checks. For a bug report, include app versions, tool name, state, and sanitized reproduction steps—not cookies, login URLs, session transcripts, or private task content.

License and acknowledgments

MIT. Native IPC portions are adapted from WebisityStudio/claude-codex-mcp-bridge; the original MIT notice is preserved. See THIRD_PARTY.md for attribution and design references.

This is an independent project, not an official integration from OpenAI, Anthropic, or the DSH maintainers.

Available Tools

11 tools
talk_answerC

回答指定的 DSH 普通问题,不支持代答权限审批。selected 填原始选项的精确标签,custom 可填写文字回答。相同答案不会重复提交。

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes
answersYes
questionIdYes

TDQS

C2.9/5.0
Behavior2/5

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

无注释,描述需承担行为透明责任。提到了'相同答案不会重复提交'(幂等性)和'不支持代答权限审批'(权限限制),但未说明副作用、所需权限、错误行为等关键信息。对于回答操作,缺少对变更的透明披露。

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?

三句话,简洁且信息密集,没有冗余。但结构上可考虑将参数用法与行为限制分开,但总体可读。

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?

对于简单工具,描述提供了基本功能、参数用法和限制,但缺少参数alaias和questionId的说明,也没有输出或错误信息。在无注释和输出schema的情况下,信息尚不完整,但基本可用。

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覆盖率为0%,描述必须补偿。它解释了'selected'和'custom'的用法(精确标签和文字回答),但未说明'alias'和'questionId'的含义。虽然部分参数被解释,但关键参数仍不清晰。

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?

描述明确说明工具用于'回答指定的 DSH 普通问题',动词和资源清晰。但'DSH 普通问题'含义模糊,且未与同级工具(如 talk_questions、talk_read)明确区分,不过整体目的明确。

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?

仅提到'不支持代答权限审批',这是一个限制条件,但没有说明何时使用该工具、何时不使用,也未提及替代方案。缺乏使用场景指导。

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

talk_bindA

将精确的已有对话和目录绑定到固定别名。用此工具绑定当前发起任务的 Codex/Claude 对话。不发送消息。

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
cwdYes
aliasYes
sessionIdYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral burden. It does disclose a meaningful side-effect: the tool does not send messages ('不发送消息'). However, it does not explain overwrite behavior for an existing alias, idempotency, persistence, or error handling when the session does not exist.

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 two short sentences with no filler. The primary action is front-loaded, followed by a usage note and a valuable negative disambiguation. Every sentence earns its place.

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 bind action, the core invocation context is present. But with no annotations, no output schema, and 0% per-parameter schema descriptions, the description omits return behavior, alias-collision semantics, and error conditions. 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.

Parameters3/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 partially does: '对话' maps to sessionId, '目录' maps to cwd, '固定别名' maps to alias, and 'Codex/Claude' connects to the app enum. However, the enum value 'dsh' is unexplained, and the source/format of sessionId and cwd are not specified.

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?

The description uses a specific verb ('bind'), names the resources ('existing conversation' and 'directory'), and the target ('fixed alias'). It also distinguishes the tool from siblings: '不发送消息' separates it from talk_send, and '已有对话' differentiates it from talk_create.

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 second sentence gives a concrete trigger: use the tool to bind the Codex/Claude conversation that initiated the current task. It does not explicitly name alternatives or state when not to use the tool, but it provides clear enough context for an agent to decide.

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

talk_createA

创建 DSH 原生对话。workspaceName 按精确名称选择已有 DSH 工作区,其目录作为 cwd;不指定工作区时需提供 cwd,对话进入未分组。同时提供两者时目录必须一致。默认开启自动回传:先绑定当前发起方 Codex/Claude 对话,再将别名填入 replyTo;创建成功即开启,无需额外调用 talk_follow。只有用户明确不要回传时才设置 autoReturn=false 并省略 replyTo;缺少目标会报错,不会静默关闭回传。相同别名和 ID 复用同一对话;调用 talk_send 前不会派发任务。

ParametersJSON Schema
NameRequiredDescriptionDefault
appNodsh
cwdNo
aliasYes
titleNo
replyToNo
requestIdYes
autoReturnNo
workspaceNameNo

TDQS

A4.5/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses side effects (binding the current Codex/Claude conversation), default behavior (autoReturn=true and replyTo auto-filled), error handling (missing target causes error, not silent disable), reuse semantics (same alias/ID reuse the same conversation), and the fact that no task is dispatched until talk_send. This is comprehensive and transparent.

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 dense paragraph that front-loads the core purpose and then logically covers workspace selection, auto-return, reuse, and task dispatch. Every sentence adds value; it is concise given the complexity. Slightly long but not bloated.

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 8 parameters, no output schema, and no annotations, the description covers the key behavioral aspects and parameter relationships. It does not describe the success return value (e.g., conversation ID), which could be useful, but the agent can likely infer it from the creation action and schema. Overall, it is sufficient for correct invocation.

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?

Schema coverage is 0%, so the description must add meaning. It explains the semantics of workspaceName, cwd, autoReturn, replyTo, and alias, including their relationships and defaults. However, it omits details for app, title, and requestId, though these are either trivial (app is const dsh) or inferable (requestId is a UUID). The description compensates well for the most complex parameters.

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?

The description clearly states it creates a DSH native conversation, using a specific verb ('创建' = create) and resource ('DSH 原生对话'). It distinguishes from siblings by explaining the workspace/cwd selection and the auto-return behavior that ties to talk_follow and talk_send, so an agent can tell it apart from related tools like talk_bind or talk_list.

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 description explains when to use this tool (to create a conversation) and gives clear context on workspace vs cwd requirements and the auto-return default. It references talk_follow and talk_send, implying alternatives and when they are needed, though it does not explicitly enumerate all sibling exclusions. This is solid guidance without being exhaustive.

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

talk_delivery_controlA

暂停或恢复投递,或将审查通过的任务标记完成。暂停 DSH 时也会请求原客户端停止并取消排队中的提示;暂停桌面对话只会暂停桥接投递。明确设置 active 才会恢复原客户端停止后的投递。标记完成会关闭回传,不会归档。

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes
stateYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and uses it well: it discloses that pausing DSH stops the original client and cancels queued prompts, pausing desktop only pauses bridge delivery, active is required to resume, and completed closes the callback without archiving. This is valuable behavioral nuance beyond the schema.

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 dense, front-loaded sentences. The first sentence states the core capability, and the next two add necessary edge-case details without redundancy. Every sentence earns its place; no filler or repetition.

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?

Given only two required parameters, no output schema, and no annotations, the description covers the main behavioral outcomes and special cases (DSH vs desktop, active requirement, completion side effects). It does not explain what 'alias' refers to or describe error conditions, but for the tool's complexity it is largely 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 description coverage is 0%, so the description must clarify parameters. It explains the meaning and effect of the state enum values (active, paused, completed) in context, but it does not define 'alias' at all. The description partially compensates for the missing schema descriptions but leaves one parameter ambiguous.

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?

The description explicitly states the tool's functions: '暂停或恢复投递,或将审查通过的任务标记完成' (pause/resume delivery, or mark a review-approved task as completed). This uses specific verbs and a clear resource, and the dual nature (control delivery vs. mark complete) is distinct from sibling read/send/list tools.

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 description gives context on when to set active (to resume after the original client stops) and distinguishes between DSH and desktop conversation behavior, but it does not explicitly name alternative tools or state when not to use this tool. Usage is implied rather than directly contrasted with siblings.

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

talk_followB

将开启后新增的 DSH 最终回复、问题、异常结束和用户直接介入的消息回传给发起方 Codex/Claude 对话。接收方忙碌时等待,暂停后需明确恢复。至少一个 MCP 进程及相关原客户端须保持运行。

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
enabledNo
destinationYes

TDQS

B3.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It reveals that the tool starts ongoing message forwarding, waits when the receiving side is busy, requires explicit resumption after a pause, and depends on a live MCP process and original client. This goes well beyond the schema, though it omits details like return behavior or how pausing is triggered.

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 compact and front-loaded: it states the core function first, then adds the operational constraints in short, clear sentences. Every sentence contributes meaningful information with no filler.

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?

There is no output schema and no annotation coverage, so the description must fully equip the agent to call the tool correctly. It explains behavior and runtime requirements but omits parameter semantics, return behavior, and how to stop or resume the follow state, leaving meaningful gaps for a 3-parameter tool.

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%, and the description does not explicitly explain source, destination, or enabled. The terms '发起方' and '接收方' hint at the destination and receiving side, and '开启后' loosely maps to enabled, but the mapping is indirect and not sufficient for an agent to confidently construct arguments.

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 action: after being enabled, it relays DSH final replies, questions, abnormal endings, and user-intervention messages back to the initiating Codex/Claude conversation. This gives a clear verb, resource, and message scope, though it does not explicitly differentiate itself from sibling tools like talk_send or talk_read.

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 description provides useful operational context: wait when the receiver is busy, explicitly resume after pausing, and keep an MCP process and the original client running. However, it never states when to choose this tool over alternatives or when not to use it, so the usage guidance is implied rather than explicit.

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

talk_listA

列出原客户端中的对话。cwd 按精确目录筛选;Claude 列出正在运行的 Desktop Code 对话,Codex 列出近期本地任务。不绑定或恢复对话。

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
cwdNo

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It explains filtering behavior and app-specific differences, but does not explicitly state whether the operation is read-only, any permission requirements, or potential side effects. 'List' implies non-mutating, but it is not stated clearly.

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 compact and information-dense. It covers purpose, filtering, app-specific behavior, and what it does not do in a few sentences with no redundancy.

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 list tool with two parameters and no output schema, the description covers the essential semantics and behavior. Missing return format details, but the tool's purpose is clear and siblings handle other operations.

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?

Schema coverage is 0%, so the description must compensate. It explains cwd as exact directory filtering and clarifies Claude/Codex behavior for the app parameter. However, the 'dsh' enum value is not explained, leaving some ambiguity for that parameter value.

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?

The description states the tool lists conversations from original clients, distinguishing between Claude and Codex behaviors and specifying the cwd filter. It clearly separates from sibling tools like talk_bind and talk_read by noting it does not bind or resume.

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?

Provides context on when to use (listing conversations) and what it does not do (bind or resume), but does not explicitly name alternatives like talk_bind or talk_read. The exclusion of binding/resuming is implicit guidance.

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

talk_outboxA

读取近期回执、自动回传错误和事件连接状态。queued 表示排队中,可以等待;unknown/sending/held 不得重发。observed 表示已在原客户端历史中读回完全一致的消息文本。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does a solid job: it defines status semantics ('queued', 'unknown/sending/held', 'observed') and imposes a behavioral rule ('不得重发'). It also signals read-only intent via '读取', though it does not cover authentication, rate limits, or output shape.

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

Conciseness5/5

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

The description is three short sentences, front-loads the core purpose, and then adds only the essential status interpretations. Every sentence earns its place with no redundant 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?

Given zero parameters, no annotations, and no output schema, the description covers the main return categories and their meanings. It could be more explicit about the output format or the meaning of '自动回传错误', but for a low-complexity status-reading tool it is largely sufficient.

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 has zero parameters, so there is no parameter burden on the description. The baseline of 4 applies because no parameter documentation is needed; the description instead focuses on what the returned statuses mean.

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 clearly states a specific verb and resource: '读取近期回执、自动回传错误和事件连接状态' (read recent receipts, automatic callback errors, and event connection status). This distinguishes talk_outbox from siblings like talk_send and talk_read by focusing on delivery status and receipts, though it does not explicitly name a sibling for contrast.

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 description provides actionable usage context: 'queued 表示排队中,可以等待;unknown/sending/held 不得重发' tells the agent when it is safe to wait and when resending is forbidden. It does not explicitly mention alternative tools, but the status-specific guidance gives clear operational direction.

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

talk_questionsB

读取 DSH 的普通问题和权限请求。普通问题可用 talk_answer 回答;需要用户决定时向用户提问。权限审批只能在 DSH Web 中处理。

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It implies a read-only operation via '读取' but does not explicitly declare non-destructiveness. It does note that permission approvals cannot be handled here, which is a useful limitation. However, it omits any description of return format, pagination, or side effects, leaving the agent partially in the dark.

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 three short sentences that are front-loaded with the core purpose. Every sentence contributes to understanding the tool's role and constraints, with no filler or redundancy.

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?

The tool is simple (one parameter, no output schema), but the description fails to explain the parameter and does not describe what the returned data looks like or how to distinguish questions from permission requests. While it gives some follow-up actions, the missing parameter semantics and output details make it incomplete for correct invocation.

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

Parameters1/5

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

The only parameter 'alias' is required but completely unexplained. The schema provides only a pattern with no semantic hint, and the description never mentions the parameter. With 0% schema description coverage and no compensation in the description, the agent cannot infer what alias refers to (e.g., a workspace alias, a question ID).

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 clearly states the verb (读取/read) and the resource (DSH 的普通问题和权限请求 – regular questions and permission requests). It distinguishes the tool from talk_answer (which answers questions) but does not explicitly contrast it with the generic talk_read sibling, so sibling differentiation is incomplete.

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 description offers some follow-up guidance: normal questions can be answered with talk_answer, and permission approvals must be handled in DSH Web. However, it does not state when to use this tool instead of talk_read or other read tools, nor does it provide explicit exclusions or selection criteria.

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

talk_readA

读取原客户端状态、近期进度、最终回复、用户消息和问题。returnRoute 显示自动回传是否开启,lastReturn 显示最近回传回执;held 表示接收方暂存、尚未交给模型,不代表回传未开启,不得重发。桥接状态 paused 表示暂停,即使原客户端状态变化也需明确恢复。truncated=true 表示省略了较早历史;idle 只表示空闲,不代表审查通过。

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes

TDQS

A3.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so excellently. It explains the meaning of returnRoute, lastReturn, held, paused, truncated, and idle, and explicitly warns against common misinterpretations: held does not mean return is disabled, and idle does not mean review passed. This prevents dangerous errors.

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 dense but every clause contributes meaning about a state or field. It could be slightly more readable with bullet points, but there is no filler or repetition.

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?

Since there is no output schema, the description rightly explains many return-field semantics and edge cases. However, it completely omits the meaning of the sole input parameter, alias, and does not describe the overall response structure. An agent can interpret results but may not know how to target the correct resource.

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

Parameters1/5

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

The only required parameter, alias, is never mentioned in the description. Schema coverage is 0%, so the description provides no meaning for what alias identifies, what values are valid beyond the regex, or how it relates to the workspace/list context. This is a major gap.

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 opens with a specific verb ('读取') and identifies a clear resource set: original client state, recent progress, final reply, user messages, and questions. This clearly marks it as a read/status tool distinct from write-oriented siblings like talk_send or talk_create, though it never explicitly names a sibling for differentiation.

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 description provides actionable interpretive rules: 'held' means the recipient is holding the message and it must not be resent; 'paused' requires explicit recovery; 'idle' does not mean approval. These are strong when-not/conditional behaviors, but the description does not state when to choose talk_read over alternatives such as talk_list or talk_follow.

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

talk_sendA

向已绑定的对话发送提示词和本地文件路径。同一 requestId 不会重复发送。接收方忙碌或暂时不可用时,消息持久保存到队列。发送结果不确定时绝不重发。文件保留在本机。

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNo
promptYes
requestIdYes
destinationYes

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that the same requestId will not be sent repeatedly (idempotency), that messages are persistently queued when the receiver is busy/unavailable, that it never resends when the result is uncertain, and that files remain local. These are important side-effect and reliability traits that help the agent anticipate behavior.

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 four short sentences, front-loaded with the primary action and then key behavioral guarantees. Each sentence adds value—no redundant or vague content. It is appropriately sized for a tool with this complexity.

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?

Given the tool's moderate complexity (4 params, no output schema, no annotations), the description covers the core behavior, idempotency, queuing, retry policy, and file locality. It implies the prerequisite of binding but does not explicitly state what happens if the conversation is not bound or how errors are surfaced. Overall, it is fairly complete but could explicitly mention the binding prerequisite.

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 description coverage is 0%, so the description must compensate. It clarifies that 'prompt' and 'files' are the content sent, and that 'requestId' serves as an idempotency key. However, it does not explain the 'destination' parameter beyond implying it is the bound conversation, and it does not detail constraints like max file count or prompt length (though these are in the schema). Partial compensation is provided.

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?

The description clearly states the action: sending prompts and local file paths to a bound conversation. This distinguishes it from sibling tools like talk_read, talk_list, and talk_create, which are read/list/create operations. The verb 'send' and resource 'bound conversation' are explicit and specific.

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 description implies usage context by requiring a 'bound conversation' (已绑定的对话), suggesting a prerequisite to bind first. However, it does not explicitly state when to use this tool versus alternatives like talk_outbox or talk_delivery_control, nor does it provide exclusions. The idempotency and queuing behavior give operational guidance but not selection criteria.

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

talk_workspacesA

列出已有 DSH 工作区的精确名称和目录。只读,不创建或重命名工作区。在 talk_create 中使用 workspaceName 选择工作区。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly declares '只读,不创建或重命名工作区' (read-only, does not create or rename), which is a critical safety trait. It also specifies the output content ('精确名称和目录' – exact names and directories), offering meaningful behavioral context beyond the empty schema.

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 three short, focused sentences: the first states the primary function, the second clarifies read-only/non-mutating behavior, and the third connects the tool to its intended downstream use. No redundant words; each sentence earns its place and the key information is front-loaded.

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 0-parameter read-only list tool with no output schema, the description covers what the tool does, what it returns (names and directories), and when to use it (before talk_create). It does not mention pagination, error conditions, or authentication, but these gaps are minor given the tool's low complexity.

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 input schema has zero parameters, so there is no parameter semantics to explain. The baseline for 0-parameter tools is 4; the description appropriately omits parameter details since none exist, and no additional compensation is required.

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?

The description clearly states the tool's function: '列出已有 DSH 工作区的精确名称和目录' (list exact names and directories of existing DSH workspaces). It also explicitly distinguishes from mutation tools by stating '只读,不创建或重命名工作区' (read-only, does not create or rename workspaces), making the purpose unambiguous.

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 description provides a concrete usage scenario: '在 talk_create 中使用 workspaceName 选择工作区' (use workspaceName in talk_create to select a workspace), telling the agent when to call this tool. It also implies not to use it for creation/renaming via the read-only statement, though it does not explicitly name alternative sibling tools (e.g., talk_list).

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. 11 tool updatesv0.4.0
    • First observedtalk_answer
    • First observedtalk_bind
    • First observedtalk_create
    • First observedtalk_delivery_control
    • First observedtalk_follow
    • First observedtalk_list
    • First observedtalk_outbox
    • First observedtalk_questions
    • First observedtalk_read
    • First observedtalk_send
    • First observedtalk_workspaces

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have distinct purposes (list, bind, send, create, control, etc.), but talk_list, talk_read, and talk_outbox have overlapping read functionalities—talk_read covers original client state and talk_outbox covers delivery receipts, which could cause some confusion. talk_follow and talk_delivery_control also share overlap in managing return/delivery flow.

Naming Consistency4/5

All tool names use the consistent talk_ prefix followed by a verb (list, bind, read, send, create, delivery_control, outbox, follow, questions, answer). Minor deviation: talk_delivery_control uses a noun+verb pattern, while others use simple verbs, but the overall pattern is clear and consistent.

Tool Count5/5

11 tools is a well-scoped count for a bridging/communication server. Each tool covers a distinct aspect of the workflow: workspace management, listing, binding, reading, sending, creating, delivery control, outbox monitoring, follow-up, and answering questions. No tool feels redundant or unnecessary.

Completeness4/5

The tool set covers the full lifecycle of creating, sending, reading, and controlling conversations, including error handling and retry semantics. Minor gap: there is no explicit tool for unblocking or archiving conversations, and permission approvals are handled externally (in DSH Web), which is a slight hole but acknowledged in the descriptions.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    The self-hosted MCP bridge between Claude Chat and Claude Code.
    46
    AGPL 3.0
  • A
    license
    A
    quality
    B
    maintenance
    A project-local MCP bridge that allows Codex Desktop to plan tasks and OpenCode to execute them within the current project directory, with session reuse and native OpenCode background subagents.
    4
    1
    MIT