Skip to main content
Glama

pi-web-mcp

English | 简体中文

test

An MCP server for Pi Web — the web UI for the pi coding agent. It wraps Pi Web's HTTP API so any MCP client (pi, Claude Desktop, Cursor, your own agent…) can browse, triage, search, read and drive your pi sessions.

Pi Web itself only serves a browser. This server turns its API into 25 tools: list and filter sessions, read transcripts, triage which conversations are waiting for you, full-text search, send messages and wait for replies, fork/rename/delete sessions, inspect project diffs — over stdio or Streamable HTTP.

┌────────────┐   MCP (stdio / HTTP)   ┌──────────────┐   HTTP   ┌──────────┐
│ any AI     │ ─────────────────────► │ pi-web-mcp   │ ───────► │ pi-web   │ ──► pi sessions
│ MCP client │ ◄───────────────────── │ (this repo)  │ ◄─────── │ :30141   │     (~/.pi/agent/sessions)
└────────────┘                        └──────────────┘          └──────────┘

Quick start

Requires Node.js ≥ 22 and a running Pi Web instance.

# run it without cloning (npm resolves the GitHub repo)
npx -y github:glwhappen/pi-web-mcp --status    # connectivity + config self-check
npx -y github:glwhappen/pi-web-mcp             # stdio MCP server on stdin/stdout

Or install it once:

npm install -g github:glwhappen/pi-web-mcp   # then run `pi-web-mcp`
# or, from a clone:
git clone https://github.com/glwhappen/pi-web-mcp && cd pi-web-mcp && npm ci
node src/index.js --status

Configure the connection (either environment variables or ~/.config/pi-web-mcp/config.json):

export PI_WEB_URL=http://127.0.0.1:30141
export PI_WEB_PASSWORD=your-pi-web-password     # Basic Auth, username is always `pi`

Register it with your MCP client. For pi, ~/.pi/agent/mcp.json:

{
  "mcpServers": {
    "pi-web": {
      "command": "npx",
      "args": ["-y", "github:glwhappen/pi-web-mcp"],
      "env": { "PI_WEB_URL": "http://127.0.0.1:30141", "PI_WEB_PASSWORD": "…" },
      "exposure": "deferred",
      "toolExposure": {
        "piweb_triage": "direct",
        "piweb_list_unread": "direct",
        "piweb_list_sessions": "direct",
        "piweb_get_session": "direct",
        "piweb_search_sessions": "direct",
        "piweb_send_message": "direct"
      }
    }
  }
}

For Claude Desktop / Cursor / any other client, use the same command + env shape (see HTTP mode for remote clients).

Related MCP server: RemoraFish MCP

Tools

Read

Tool

What it does

piweb_status

Connectivity + config self-check (address, password source, read/write mode, session count)

piweb_list_sessions

List/filter sessions: cwd, project, keyword, status, since, sort, limit

piweb_list_projects

Aggregate by project directory: sessions, running, unread, last activity

piweb_list_unread

What needs attention: 🟠 awaiting input / 🔵 unread / 🟢 running

piweb_triage

Classify every session: ❓ probably asking me / ⚠️ stopped mid-turn / 💤 stalled / 🟢 running / 💬 waiting for my next step — with the evidence for each verdict

piweb_search_sessions

Literal full-text search across all transcripts (server-side 3s budget, may truncate)

piweb_get_session

Read a transcript; offset pages backwards, include_thinking=none/preview/full

piweb_agent_state

Global running snapshot, or one session's detail (streaming, queue, context usage)

piweb_list_models

Models available for a project, default model, thinking levels

piweb_list_files

List project files (git index first), fuzzy matched

piweb_read_file

Read a text file chunk (continue with offset)

piweb_git_status

Changed files + insertions/deletions

piweb_git_diff

Full patch for one file

piweb_watch_session

Watch what a session is producing right now (event stream)

Write

Tool

What it does

piweb_send_message

Send a prompt; with wait_seconds > 0, wait for the turn and return the reply

piweb_wait_for_reply

Poll until the current turn finishes, return the last assistant reply

piweb_create_session

Create a session (optional first prompt, model, thinking level)

piweb_fork_session

Copy the current branch into a new session

piweb_auto_name_session

Let the model name a session

piweb_set_model

Switch a session's model

piweb_abort_session

Stop the current turn

piweb_mark_read

Update this server's read cursor (one/all, or mark unread again)

piweb_rename_session

Rename a session

piweb_export_session

Export the session as pi's single-file HTML

piweb_delete_session

Delete a session (needs confirm=true; subagent sessions go with it)

The session argument accepts a full id, an id prefix, an exact name, or a fragment of the name/first message. An ambiguous match fails with the candidate list instead of guessing.

Triage rules

piweb_triage runs no model — it is pure rules over the last message on the active branch, whether a tool call is still pending, and how long the session has been quiet. Fast, cheap, reproducible, and every verdict carries its evidence.

Verdict

Evidence

🟠 Awaiting input

Pi Web reports the session is blocked on an extension UI prompt

🟢 Running

The session has a live agent process

⚠️ Stopped mid-turn

Last entry is my message / a tool result / an unanswered tool call / an assistant message with no text

💤 Stalled

Same as above, and the session has been idle for more than stalled_hours (default 6)

❓ Probably asking me

Last assistant message contains a question mark

💬 Waiting for my next step

The assistant finished its turn

⚪️ Empty

No messages (excluded by default)

Read-cursor semantics

Pi Web keeps its "unread" markers in browser localStorage, which no server-side API exposes. This server therefore maintains its own cursor in <config dir>/read-state.json (the modified timestamp of each session you have read, guarded by a cross-process file lock). Reading a session via piweb_get_session / piweb_wait_for_reply updates it; piweb_mark_read manages it explicitly.

Browser unread and MCP unread are two different sets and do not affect each other.

Configuration

Command line > environment > ~/.config/pi-web-mcp/config.json > password files.

{
  "baseUrl": "http://127.0.0.1:30141",
  "username": "pi",
  "password": "…",
  "timeoutMs": 30000,
  "httpToken": "…",
  "writeRoots": [],
  "tools": [],
  "http": { "host": "127.0.0.1", "port": 30142 }
}

Key / env var

Meaning

baseUrl / PI_WEB_URL

Pi Web address, default http://127.0.0.1:30141

password / PI_WEB_PASSWORD

Pi Web password (Basic Auth, username is always pi)

PI_WEB_USERNAME

Override the Basic Auth username

PI_WEB_PASSWORD_FILE

Password file; otherwise ~/.config/pi-web-mcp/password, then ~/pi-web.password

httpToken / PI_WEB_MCP_TOKEN

Bearer token for HTTP mode. Required when binding a non-loopback host

readonly / PI_WEB_MCP_READONLY=1

Register read-only tools only (plus the local read cursor and wait_for_reply)

writeRoots

Array; when non-empty, write operations are only allowed for sessions inside these project roots

tools

Array; when non-empty, only these tools are registered

http.host / http.port

HTTP mode listen address, default 127.0.0.1:30142

PI_WEB_MCP_HOME

Config directory, default ~/.config/pi-web-mcp

CLI flags: --http, --host, --port, --http-token, --readonly, --write-root <dir> (repeatable), --tools a,b,c, --status, --version, --help.

HTTP mode (for remote AIs)

pi-web-mcp --http --host 172.17.0.1 --port 30142

The endpoint is POST /mcp (Streamable HTTP, stateless: one server instance per request, so several clients can connect concurrently). Clients authenticate with Authorization: Bearer <httpToken> or X-Pi-Web-Mcp-Token.

Binding a non-loopback address without a token is refused at startup.

Client config for a remote endpoint:

{
  "mcpServers": {
    "pi-web": {
      "url": "https://pi-mcp.example.com/mcp",
      "headers": { "Authorization": "Bearer <httpToken>" }
    }
  }
}

A systemd unit example lives in deploy/pi-web-mcp.service.example.

Security model

This server can start agents that edit files and run commands, so treat it as a privileged interface:

  • Never expose HTTP mode without a token. The server refuses to bind a non-loopback host without one.

  • --readonly removes every tool that changes state (16 tools remain in read-only mode vs 25 in read-write mode).

  • --write-root limits write operations to sessions inside given project roots — useful when several agents share the endpoint.

  • Put HTTPS in front (a reverse proxy such as nginx-proxy-manager) before exposing it to the internet.

  • Prefer stdio mode locally: nothing listens on a port, and the client controls the process lifetime.

  • piweb_delete_session requires an explicit confirm: true.

Development

git clone https://github.com/glwhappen/pi-web-mcp
cd pi-web-mcp
npm ci
npm test                       # unit tests against a mock pi-web (no real instance needed)
npm run smoke                  # read-only smoke test against a real pi-web
npm run smoke:write            # write path end-to-end (creates a session — spends model tokens)

Layout:

src/
  index.js          entry point: CLI flags, stdio/HTTP transports, graceful shutdown
  client.js         Pi Web HTTP client (Basic Auth, timeouts, retries, SSE subscription)
  config.js         config resolution (env > config.json > password files)
  guard.js          read/write boundaries (readonly, writeRoots)
  session-index.js  cached session list + id/name resolution
  read-state.js     read cursor (cross-process file lock)
  triage.js         session triage rules and rendering
  format.js         session/message → Markdown
  tools/            {index,shared,read,write}.js — the 25 tools
test/
  mock-piweb.mjs    fake Pi Web server
  server.test.mjs   unit tests
deploy/
  pi-web-mcp.service.example

The unit tests use a mock Pi Web, so they run anywhere — no pi installation required.

Limitations

  • Pi Web's unread markers are browser-local; this server keeps a separate cursor (see above).

  • piweb_search_sessions is bounded by the server's 3-second search budget and can return truncated.

  • piweb_watch_session starts the session's agent process if it is not running (the same thing opening the session in Pi Web does).

  • piweb_send_message and piweb_create_session make a real agent do real work — check the session before sending.

  • HTTP mode is stateless: no server-initiated notifications, no SSE-only features.

License

MIT

Available Tools

25 tools
piweb_abort_session中断会话当前这一轮A
Destructive

给正在运行的会话发 abort,停掉它当前这一轮(等价于界面上的 Stop)。

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionYes会话 id / 名称

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds useful context by clarifying the scope of destruction ('current round' only) and equating it to a known UI action, which helps an agent understand it does not delete the session.

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 that conveys the action, target, effect, and a familiar UI equivalent with zero 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 simple one-parameter mutation tool with full annotation coverage and no output schema, the description is nearly complete: it states what it does, the prerequisite ('running session'), and the limited scope of the interruption. Only minor details like idempotency or behavior on non-running sessions are absent.

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 single 'session' parameter is fully documented by the schema. The description adds no additional semantics about the parameter beyond what the schema provides, so the baseline of 3 is appropriate.

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: sending an abort to a running session to stop its current round, equivalent to the UI Stop button. It clearly distinguishes the effect from deleting a session, but does not explicitly name or contrast with any sibling tool.

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: call it when a session is running and you want to interrupt the current round. There is no explicit when-not guidance or mention of alternatives (e.g., piweb_delete_session for full termination).

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

piweb_agent_state查看 agent 运行状态A
Read-only

不带 session 时给全局快照(哪些会话在跑/等待输入);带 session 时给该会话的详细状态(是否流式中、上下文占用、模型、排队消息)。

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNo会话 id / 名称;省略则看全局

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered; the description goes further and itemizes what state is exposed (streaming or not, context occupancy, model, queued messages). It does not discuss freshness, cost, or whether the snapshot is cached, which keeps it out of 5 territory.

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?

One compact sentence with the two branches front-loaded in the order the agent will decide between them; every clause carries information and there is no boilerplate.

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, the description carries the return-value burden and does name the fields of interest (running/waiting, streaming, context usage, model, queued messages). It stops short of exact field names or shapes, but is sufficient for a read-only, single-parameter state query.

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 100% and the single param is self-documenting, so the baseline would be 3. The description earns extra credit by pairing each parameter state with a distinct result shape (global snapshot vs. detailed per-session state), which tells the agent why to pass or omit session rather than just how.

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 resource (agent run state) and explicitly splits behavior into two modes: no-session global snapshot vs. per-session detail. It is clear what the tool returns, but it never distinguishes itself from overlapping siblings such as piweb_status, piweb_list_sessions, or piweb_get_session, so an agent must still infer which one to pick.

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?

Gives explicit mode-selection guidance: omit session for the global view of running/blocked conversations, pass session for one session's detail. There are no exclusions or named alternatives, so it falls short of routing the agent against competing sibling tools.

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

piweb_auto_name_session让模型给会话起名A
Idempotent

调用 pi 的标题生成,让模型根据对话内容给会话起一个名字并落盘(等价于侧边栏的自动命名)。要花一次模型调用。

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionYes会话 id / 名称

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the annotations, the description discloses two behavioral traits: it consumes one model call (cost/latency) and it persists the result to disk. The openWorldHint and idempotentHint annotations align with this, and readOnlyHint=false is consistent with writing a name. It stops short of saying what happens to an existing name, which idempotency partially covers.

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 compact sentences, front-loaded with the action and the mechanism, then the equivalence and cost caveat. 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?

For a single-parameter tool with no output schema, the description covers mechanism, effect (persisted name), and cost, which is enough to call it correctly. A note on whether an existing name is overwritten would make it 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 description coverage is 100% and the single 'session' parameter is already documented as '会话 id / 名称'. The description adds no format, id-vs-name disambiguation, or validation detail beyond the schema, so baseline 3 applies.

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: it invokes pi's title generation so the model names the session from conversation content and writes it to disk. The phrase '等价于侧边栏的自动命名' makes the automatic nature clear, implicitly distinguishing it from the manual piweb_rename_session sibling, though that sibling is never named.

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 (call it when you want an auto-generated session name) and the cost warning '要花一次模型调用' is a useful selection consideration. However, there is no explicit when/when-not guidance and no alternative (e.g. piweb_rename_session) is named for the manual case.

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

piweb_create_session新建会话并可选发首条消息A

在指定项目目录下新建一个 pi 会话(返回真实 sessionId)。带 message 时把它作为首条提示词发出去;不带 message 时只创建运行时(ensure_session)。可选指定 provider/modelId/thinking_level,模型取值用 piweb_list_models 查。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdYes项目目录的绝对路径,必须已存在
messageNo首条提示词;省略则只创建会话不发送
model_idNo模型 id(与 provider 一起给)
providerNo模型 provider(与 model_id 一起给)
wait_secondsNo发首条消息后等待完成的秒数,0=不等待(默认)
thinking_levelNo思考等级

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the bar is lower. The description adds real behavioral nuance: that omitting message skips dispatch entirely, and that the tool returns a real sessionId. It does not discuss failure modes when cwd is invalid, but the schema notes the directory must already exist.

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 tight sentences, front-loaded with the core action and the return-value promise, followed by the mode distinction and the optional-parameter hint. No filler, though the parenthetical for sessionId and ensure_session adds slight nesting.

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?

There is no output schema, and the description compensates by naming the returned sessionId. The wait_seconds blocking semantics are left to the schema, which documents them fully. For a 6-param creation tool this is nearly complete, missing only error/edge-case behavior on an invalid cwd.

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 description coverage is 100%, so the baseline is 3. The description goes beyond the schema by grouping the optional model knobs (provider/modelId/thinking_level) and pointing at piweb_list_models as the source of valid model values, which the schema text does not say.

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 and resource (新建 pi 会话) with the scope qualifier 在指定项目目录下, and immediately discloses the return value (真实 sessionId). It also disambiguates its two modes against the related ensure_session semantics, so an agent can distinguish it from piweb_get_session / piweb_list_sessions.

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?

Explicitly states the two usage modes: with message it sends the first prompt, without message it only creates the runtime. It also routes the agent to piweb_list_models for valid model values. It stops short of stating when to prefer this over piweb_send_message for an existing session, but the context is clear.

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

piweb_delete_session删除会话A
Destructive

删除会话(会连同它下面的子代理会话一起删掉,不可恢复)。必须显式传 confirm=true 才会执行。

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo确认删除:必须显式传 true,否则拒绝执行
sessionYes会话 id / 名称

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds non-obvious behavior: the deletion cascades to sub-agent sessions and is irreversible, plus a mandatory confirmation gate. These are real consequences beyond what the structured fields convey.

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 tightly-packed sentence with the destructive consequence front-loaded in the parenthetical and the confirmation requirement last. Every clause earns its place with zero 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?

For a destructive, no-output-schema mutation tool, it covers what is destroyed (sub-agent sessions), that it cannot be undone, and the guard condition. Only the permission/auth requirements and post-delete state are left implicit.

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 100%, so both parameters (session, confirm) are already documented in the schema. The description's mention of confirm=true duplicates that; it adds no new format or semantics for the session identifier. Baseline 3 applies.

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+resource (删除会话/delete session) and scopes it with the cascade and irreversibility detail. It does not, however, distinguish itself from siblings like piweb_abort_session, which an agent might conflate with terminating a session.

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 clearly states the precondition that confirm=true must be explicitly passed or execution is refused, which is genuine usage guidance. It does not say when to prefer this over alternatives such as piweb_abort_session (stop running) versus permanent removal, leaving that inference to the agent.

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

piweb_export_session导出会话为 HTMLA
Idempotent

把会话导出成 pi 官方单文件 HTML(可离线翻阅/分享),写到本地磁盘并返回路径。大会话导出要几秒。

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionYes会话 id / 名称
out_pathNo输出文件绝对路径;默认 <系统临时目录>/pi-web-export/<会话id>.html

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and idempotentHint=true; the description corroborates this by stating it writes to local disk and returns the path, and adds a latency warning for large sessions ('大会话导出要几秒') that annotations do not convey. It does not mention overwrite behavior or failure modes, but the added side-effect and performance context is genuinely useful.

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 compact sentence that front-loads the core action and artifact, with the latency caveat appended. No redundant restatement of the title or schema.

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 two-parameter tool with no output schema, the description covers the action, the file artifact, the returned path, and expected latency. Only minor details such as overwrite handling or error behavior are absent.

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 100%, so both parameters (session id/name and out_path with its default) are already fully documented in the schema. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.

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 (export), resource (session), and concrete artifact (single-file offline HTML written to local disk, path returned). This clearly separates it from read-only siblings like piweb_get_session or piweb_read_file, which do not produce a file artifact.

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 parenthetical '可离线翻阅/分享' implies the use case (offline reading/sharing), but there is no explicit when-to-use versus piweb_get_session or when-not guidance. Usage is only inferable.

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

piweb_fork_session从会话当前分支复制出新会话A

把会话当前分支整体复制成一个新会话(等价于侧边栏的 Fork)。原会话不受影响。用来「从这条线另开一条道」。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo顺手给新会话起个名字
sessionYes会话 id / 名称

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true but say nothing about what happens to the source; the description explicitly states 原会话不受影响 and that the branch is copied 整体, which clarifies the non-destructive fork semantics. It does not mention that repeated calls are non-idempotent (creating duplicate sessions), which is the one remaining behavioral gap.

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-loading the core action and immediately following with the guarantee about the original session. The final sentence restates the use case already implied by the first, so it is mildly redundant but not wasteful.

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 two-parameter creation tool with no output schema, the description covers what is created and that the source is untouched, which is adequate to invoke it. It omits what the call returns (presumably the new session's identifier), which an agent would need to continue working with the fork.

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 100% for both parameters (session required, name optional), so the schema carries the parameter burden. The description adds no format, id-vs-name, or naming-collision guidance beyond what the schema already says, making the baseline 3 appropriate.

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 names a specific verb and resource: copying the session's current branch wholesale into a new session, and anchors it to a familiar UI concept (sidebar Fork). An agent can tell it produces a new session from an existing branch, though it never names the nearest sibling (piweb_create_session) it differs from.

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 phrase 「从这条线另开一条道」 implies the intended use case (branch off without disturbing the existing line), but there is no explicit when-to-use, when-not-to-use, or comparison against piweb_create_session. Usage is inferable rather than stated.

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

piweb_get_session读取会话内容A

读取一个会话的对话内容(默认最后 30 条消息,含工具调用摘要)。session 可传完整 id、id 前缀、会话名称或名称/首条消息片段。要读更早的历史用 offset 往前翻;思考内容默认只给预览,include_thinking="full" 会去取完整思考链。默认会把该会话在本地标记为已读。

ParametersJSON Schema
NameRequiredDescriptionDefault
tailNo读取最后 N 条消息,默认 30;要全量就传大值
formatNomarkdown(默认)或 json(原始消息结构)
offsetNo从末尾往前跳过 N 条,用于分页读更早的历史,默认 0
sessionYes会话 id / id 前缀 / 名称 / 名称或首条消息片段
mark_readNo读完后标记已读,默认 true
max_charsNo正文总字数预算,默认 60000
include_toolsNo是否包含工具调用与结果,默认 true
include_thinkingNo思考内容:none(默认)/preview(预览)/full(取全文,较慢)
tool_result_charsNo单条工具结果截断长度,默认 800

TDQS

A3.7/5.0
Behavior4/5

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

Annotations are sparse (readOnlyHint=false, openWorldHint=true), but the description discloses meaningful side effects and defaults: it marks the session as read locally, defaults to the last 30 messages, includes tool summaries, and shows thinking only as a preview unless include_thinking='full' is used, which is noted as slower. It does not cover auth or rate limits, but adds substantial context beyond annotations.

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 what the tool does, then covers session identifiers, pagination, thinking behavior, and read marking. Every sentence carries information, though it could be slightly more scannable.

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 9-parameter tool with no output schema and minimal annotations, the description covers the most important behavioral defaults and side effects. Remaining schema-level details like format, max_chars, and tool_result_chars are documented in the schema, so the definition is reasonably 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 100%, so the schema already documents all 9 parameters. The description largely repeats schema facts (session id/prefix/name/snippet, default 30 messages, default read marking) and adds only slight nuance about include_thinking='full' fetching the complete chain.

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: reading a session's conversation content, with defaults for the last 30 messages and tool-call summaries. It is clearly distinguishable from listing/searching/watching siblings by what it returns, but it does not explicitly name an alternative tool.

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?

Gives operational guidance for pagination ('要读更早的历史用 offset 往前翻') and for fetching full thinking chains, which implies how to use the tool. However, it never states when to use this tool versus siblings like search_sessions, list_unread, or watch_session, nor any exclusions.

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

piweb_git_diff看单文件 git diffA
Read-only

看某个文件相对 git 的完整 patch。复制到会话里让 agent 改,或用来核查它的改动是否合理。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdYes项目目录(仓库内)的绝对路径
pathYes目标文件的绝对路径
max_charsNopatch 截断长度,默认 30000

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes this is a safe read operation, lowering the bar. The description adds that the output is a full patch, but does not disclose that the patch may be truncated at max_chars (only the schema hints at this), so it adds modest behavioral context beyond annotations.

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, front-loaded with the core purpose before the usage hint. Efficient with essentially no filler, though the second sentence mixes two distinct use cases.

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 inspection tool with no output schema, the description conveys the nature of the return value ('完整 patch') and its intended use. The only minor gap is not mentioning truncation behavior, which is left to the 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 description coverage is 100%, so cwd, path, and max_chars are already documented in the schema. The description contributes no additional parameter meaning, making the baseline 3 appropriate.

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+resource: viewing the complete git patch of a single file ('看某个文件相对 git 的完整 patch'). This is clear and concrete, but it does not explicitly differentiate from siblings like piweb_git_status or piweb_read_file.

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 gives two concrete usage contexts — copy the patch into a session so an agent can edit, or use it to verify that an agent's changes are reasonable. That is real when-to-use guidance, though it names no alternative tool or exclusion condition.

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

piweb_git_status看项目 git 改动A
Read-only

看某个项目目录的 git 状态:分支仓库根、改了哪些文件(状态码)、增删行数。用来验收 agent 到底动了什么。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdYes项目目录的绝对路径

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral detail about what the tool surfaces: branch/repo root, changed files and their status codes, and added/deleted line counts. It still omits operational details such as error behavior or handling of untracked files.

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 tight sentences: the first front-loads what is returned, and the second states the operational purpose. Every clause earns its place 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 read-only git status tool with no output schema, the description adequately explains return content and intended use. It is only slightly incomplete because it does not distinguish git status from git diff, a sibling that an agent may need to choose between.

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?

The schema already documents the single required parameter cwd as an absolute project path, with 100% schema description coverage. The description only repeats '某个项目目录' and adds no syntax, path constraints, or edge-case guidance beyond the schema, so baseline 3 applies.

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: viewing the git status of a project directory, and lists the concrete output (branch/repo root, changed files with status codes, added/deleted line counts). It does not explicitly distinguish itself from the sibling piweb_git_diff, which likely overlaps in inspecting changes.

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 gives clear context for use: '用来验收 agent 到底动了什么' (to verify what an agent changed). It does not state when-not to use it or name piweb_git_diff as an alternative for detailed diffs, so it stops short of explicit routing guidance.

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

piweb_list_files列项目文件A
Read-only

列出某个项目目录下的文件(优先 git ls-files,跳过 .gitignore)。可带 filter 做模糊匹配。用来定位某个项目里有哪些文件可读。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdYes项目目录的绝对路径
limitNo最多列出多少,默认 100
filterNo文件名模糊匹配(如 mcp、route.ts)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real behavioral context beyond that: it prefers git ls-files and skips .gitignore, which directly affects which files appear in the result. It stops short of saying what happens outside a git repository or what the returned entries look like.

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 clauses, well front-loaded: what it lists, how it lists, then why you'd use it. Nearly every clause earns its place; only the filter sentence is mildly redundant with the schema.

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 list tool with no output schema, the description conveys the resource and the mechanism sufficiently. It could be stronger by stating the return shape (a path list) or the non-git-repo fallback, but nothing critical for invocation is missing.

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 100%, so all three parameters (cwd, limit, filter) are already documented in the schema. The description's '可带 filter 做模糊匹配' merely restates the schema's filter definition and adds no format or matching-rule detail beyond it. Baseline 3 applies.

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 (list files under a project directory) and even the mechanism (git ls-files, .gitignore skipped). It is distinguishable from piweb_read_file by framing itself as the discovery step ('用来定位某个项目里有哪些文件可读'), though it never names that sibling 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?

The closing clause implies intended usage – locate which files exist/are readable before reading them – but gives no explicit when-to-use/when-not guidance and never names piweb_read_file as the follow-up alternative. Usage is inferred rather than stated.

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

piweb_list_models列出可用模型A
Read-only

列出某个项目目录下 pi 可用的模型(provider/model 形式)与默认模型、可用思考等级。新建会话或切模型前拿它选值。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo项目目录,默认取当前会话/常用目录;不确定就传会话的 cwd
limitNo最多列出多少,默认 60
filterNo只看名字里含该关键词的模型

TDQS

A4.2/5.0
Behavior4/5

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

readOnlyHint=true and openWorldHint=true already establish the safety profile, so the description doesn't need to restate that it is a read. It does add real value by disclosing what the call surfaces — available models, the default model, and thinking levels — which is behavior beyond the annotations and, with no output schema, otherwise unavailable.

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 tight sentences. The capability and its output content come first, and the usage trigger is packed into the second clause 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?

With no output schema, the description usefully enumerates the return content, and all three optional parameters are covered by the schema. It stops short of mentioning truncation or the limit's effect on results, which is the only real gap for a listing tool of this kind.

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 100%: cwd, limit (default 60, max 500), and filter are each documented in the schema itself. The description adds no syntax, format, or interaction detail beyond that, so the baseline of 3 applies.

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 gives a specific verb and resource ('列出某个项目目录下 pi 可用的模型') and specifies the returned shape (provider/model form, default model, available thinking levels). That return-content detail cleanly separates it from the mutation sibling piweb_set_model, which the usage clause implicitly routes away from.

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 exactly when to call it: '新建会话或切模型前拿它选值' — before creating a session or switching models, to pick a value. It gives no explicit when-not condition or named alternative, but the context is unambiguous.

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

piweb_list_projects按项目聚合会话A
Read-only

按项目目录聚合 pi-web 会话:每个目录有多少会话、几个在跑、几个未读、最近活动时间。用来先看「我的活儿都压在哪个目录」。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo返回项目数上限,默认 30
min_sessionsNo只显示会话数不少于该值的项目,默认 1

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 and openWorldHint=true, so the safety profile is covered. The description usefully discloses the aggregation output (running/unread counts, last activity), but says nothing about ordering, pagination, or whether projects with zero sessions are excluded.

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 compact sentences: the first states the aggregation and its output fields, the second states the intended use. Nothing is redundant, and the core purpose 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?

There is no output schema, so the description correctly compensates by enumerating the aggregated fields returned. Combined with annotations covering read-only safety and a fully documented 2-parameter schema, the definition is nearly sufficient; only ordering/pagination and edge-case behavior remain unstated.

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 100%, so limit and min_sessions are already fully documented in the schema, including their defaults. The description adds no format, ordering, or interaction detail beyond that, so the baseline 3 applies.

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 names a specific verb+resource (aggregate pi-web sessions by project directory) and enumerates exactly what is aggregated: session count, running count, unread count, last activity time. This clearly separates it from piweb_list_sessions, which lists sessions rather than grouping them, though no sibling is named 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?

The phrase 「用来先看『我的活儿都压在哪个目录』」 implies an exploratory/overview use case, which gives the agent some routing signal. However, it offers no explicit when-to-use conditions, no when-not, and does not point to alternatives such as piweb_list_sessions or piweb_list_unread for narrower questions.

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

piweb_list_sessions列出 pi-web 会话A
Read-only

列出/筛选 pi-web 里的 pi 会话(按项目目录、关键词、状态、时间过滤)。status: all|running|awaiting|unread,unread 用的是本 MCP 自己的已读游标(与浏览器里的未读标记不共享)。keyword 只匹配会话名称/首条消息/目录,全文检索用 piweb_search_sessions,想要「哪些会话在等我」用 piweb_triage。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo按项目目录过滤,子目录也算(前缀匹配)
sortNo排序,默认 recent
forceNo绕过 pi-web 的会话列表缓存重新扫描
limitNo返回条数上限,默认 20
sinceNo只看该时间之后有更新的,如 30m、24h、7d、2026-10-01
statusNo状态过滤,默认 all
keywordNo匹配会话名称、首条消息、目录
projectNo按 projectKey/projectRoot 精确过滤
include_emptyNo是否包含一条消息都没有的空会话,默认 false
include_subagentsNo是否包含子代理会话,默认 false

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds a genuinely non-obvious behavior: unread uses this MCP's own read cursor and is NOT shared with the browser's unread markers — an agent would otherwise mis-model the state. It does not discuss result ordering guarantees or pagination beyond what `sort`/`limit`/`force` already state in 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?

Front-loaded with purpose, then the two disambiguation rules. For a 10-parameter tool the text is dense but every clause maps to a decision the agent must make; no filler and no restatement of field defaults already in the schema.

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 10-param, no-output-schema tool with only two annotations, the description covers the highest-risk ambiguities (unread cursor, keyword scope, sibling routing). It omits return-shape/ordering description and does not explain `include_subagents` vs `include_empty` intent beyond the schema, which keeps it just short of 5.

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 description coverage is 100%, so baseline is 3. The description goes beyond the schema by disambiguating the enum value `unread` (whose cursor semantics the enum name alone hides) and by bounding what `keyword` actually matches. That is real added meaning over the field descriptions.

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?

Opens with a specific verb+resource (列出/筛选 pi-web 里的 pi 会话) and immediately enumerates the filter axes (项目目录、关键词、状态、时间). It explicitly names two siblings it is not — piweb_search_sessions and piweb_triage — so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Provides explicit when-to-use-else guidance: keyword only covers 会话名称/首条消息/目录, so full-text search must go to piweb_search_sessions; '哪些会话在等我' must go to piweb_triage. It also scopes the ambiguous status=unread value. This is a routing rule set, not a hint.

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

piweb_list_unread未读/待介入的会话A
Read-only

一次列出需要我关注的会话:🟠 正在等待用户输入的、🔵 本 MCP 上次读过之后又有新内容的、🟢 正在跑但我没看过的。注意:未读用的是本 MCP 的已读游标(用 piweb_get_session 或 piweb_mark_read 更新),与浏览器 localStorage 里的未读标记是两套。想按「对话结局」判断谁在等我,用 piweb_triage。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo只看某个项目目录(前缀匹配)
limitNo每类最多显示多少条,默认 20
sinceNo只看该时间之后更新的,如 7d

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover readOnly/openWorld, but the description adds genuinely useful behavioral context: the 'unread' notion is driven by this MCP's own read cursor, mutated by piweb_get_session and piweb_mark_read, and is deliberately separate from browser localStorage markers. That is exactly the kind of non-obvious semantics an agent needs.

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-loads the purpose with the category legend, then appends two caveats (cursor semantics, alternative tool). Dense but each sentence carries information; 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?

No output schema exists, but the description effectively explains what the three categories mean, which covers the return semantics for a read-only list tool. Combined with annotations, an agent has enough to call it correctly, though pagination/ordering behavior is not described.

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 100%, so all three parameters (cwd, limit, since) are already documented in the schema. The description adds no further parameter syntax or format detail, so the baseline 3 applies.

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 (list) plus resource (sessions needing attention) with a three-way taxonomy of the returned categories (waiting-for-input, new-since-cursor, running-unviewed). It clearly distinguishes itself from piweb_triage and, by implication, from the plain piweb_list_sessions.

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?

States the use case (sessions needing my attention) and names piweb_triage as the alternative when judging by conversation outcome. It does not explicitly state when to prefer piweb_list_sessions instead, so it stops short of full when/when-not routing.

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

piweb_mark_read标记会话已读/未读A

更新本 MCP 的已读游标:session 给了就标记该会话,省略则把当前所有未读会话一次性标记为已读;unread=true 则反过来清掉游标,让它重新算未读。只影响本 MCP 的游标,不碰浏览器里的未读标记。

ParametersJSON Schema
NameRequiredDescriptionDefault
unreadNotrue=标记为未读(清除游标),默认 false
sessionNo会话 id / 名称;省略=对当前所有未读会话生效

TDQS

A4.1/5.0
Behavior4/5

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

With readOnlyHint=false and openWorldHint=true already signaling a mutation, the description adds real value by disclosing that only the MCP-side cursor is modified and the browser's unread markers are untouched. It also explains the reversibility of unread=true, though it doesn't describe any response or side effects on the unread count itself.

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-loads the core action and packs the three behaviors into a tight single sentence plus a scope sentence. Nothing is wasted, though the run-on structure slightly reduces scannability.

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 two-optional-parameter mutation tool with no output schema and no nested objects, the description covers purpose, both modes, and scope boundaries. It is essentially complete, missing only return/confirmation behavior, which is minor here.

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 both parameters are already documented in the schema. The description restates the same semantics (session optional, unread default false) without adding format or edge-case detail beyond the schema, so baseline 3 applies.

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 and resource: it updates this MCP's read cursor, with clear per-session vs. bulk semantics. It also distinguishes itself by clarifying the scope ('only this MCP's cursor, not the browser's unread markers'), which separates it from sibling read/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 Guidelines4/5

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

Explicitly describes the two operating modes: supply session to target one conversation, omit it to mark all unread at once, and unread=true to reverse/clear the cursor. It gives clear context for invocation but does not name alternative tools for related jobs.

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

piweb_read_file读项目文件内容A
Read-only

读一个文本文件的片段(服务端按块返回,默认一块;用 offset=nextOffset 继续读下一块)。只读文本类文件,二进制会被拒。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes文件的绝对路径
offsetNo从第几个字节开始读,默认 0
max_charsNo返回内容截断长度,默认 20000
session_idNo会话 id:用于放行「被该会话引用过」的目录之外的文件

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds genuinely new behavior: server-side chunked return, one chunk by default, and the nextOffset continuation contract, plus rejection of binary files. It does not cover permission/session-scoping behavior of session_id, but the chunking contract is meaningful added context.

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 dense sentences, no filler, front-loading the chunked-read behavior before the continuation hint and the binary exclusion. Every clause carries 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?

Annotations cover the safety profile and the schema fully documents all four parameters, so the description only needs to add operational semantics — which it does via the chunking/continuation contract and binary rejection. Minor gaps remain around return format and session_id scoping, but no output schema exists to help.

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?

With 100% schema coverage the baseline is 3, but the description goes beyond the schema by tying 'offset' to a returned nextOffset value for pagination, which is the actual usage convention an agent needs. It does not clarify max_chars or session_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 and resource ('读一个文本文件的片段') and defines the scope precisely: chunked text reads with an offset continuation. It is clearly distinct from piweb_list_files, though it never names a sibling explicitly.

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

Usage Guidelines4/5

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

Gives the continuation pattern (use offset=nextOffset to read the next chunk) and a clear exclusion (binary files are rejected). It stops short of naming an alternative tool or describing when to prefer another read route, so it is context-rich but not fully routing.

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

piweb_rename_session重命名会话B
Idempotent

给会话改名字(等价于 pi-web 侧边栏的重命名)。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes新名称
sessionYes会话 id / 名称

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this is a write (readOnlyHint=false), idempotent, and open-world, so safety and repeat-call semantics are covered. The description adds the useful context that the change is user-visible and equivalent to the sidebar rename. It does not disclose whether the name must be unique, what happens on collision, or the response shape.

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?

A single short sentence with no filler, and the action plus the UI equivalence are front-loaded. It is appropriately sized but unambitious.

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 two-parameter mutation with no output schema, the definition covers the essentials and annotations carry the mutation profile. However, gaps remain on naming constraints and failure behavior, which matter for an idempotent renamed operation.

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%, with both 'name' and 'session' documented in the schema, so the baseline is 3. The description adds no format, constraint, or identifier-resolution detail beyond the 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?

States a specific verb (rename) and resource (session) in one sentence, and ties it to a concrete, recognizable UI action in the pi-web sidebar. It does not differentiate from siblings such as piweb_auto_name_session, which also assigns names, leaving a small ambiguity.

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 when-to-use guidance and no alternatives named. An agent cannot tell from this text whether to prefer this tool over piweb_auto_name_session or how renaming interacts with session lifecycle operations.

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

piweb_search_sessions全文搜索会话内容A
Read-only

在所有会话的消息正文里做字面量(不区分大小写)搜索,返回命中片段所在的会话 id。服务端有 3 秒时间预算,结果可能被截断(truncated);命中很多时缩小关键词或用 piweb_get_session 细看。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo只看某个项目目录(前缀匹配)
limitNo返回命中条数上限,默认 20
queryYes搜索关键词(字面量,最长 200 字)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful traits beyond that: literal (non-regex) semantics, case-insensitivity, a 3-second server time budget, and possible truncation of results.

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?

A single tight sentence with front-loaded purpose, then the caveat (time budget/truncation) and the alternative. No wasted words, though the semicolon-chained clauses are dense.

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?

No output schema exists, and the description compensates by explaining what is returned (session ids of matched snippets) plus the truncation caveat. Adequate for a read-only search tool; it could add a hint about the snippet/limit behavior on truncation.

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 100%, so all three parameters are already documented in the schema. The description only echoes 'literal search' and adds case-insensitivity, adding marginal value over the structured fields.

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 (literal, case-insensitive search), the precise resource (message bodies across all sessions), and the return shape (session ids of matched snippets). This cleanly distinguishes it from piweb_get_session, which it names, and from piweb_list_sessions.

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?

Gives explicit routing: narrow the keyword when there are many hits, or fall back to piweb_get_session for detail. Clear context for when to use it versus drilling in, though it does not state an explicit when-not condition.

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

piweb_send_message给会话发消息A

向一个已有会话发送提示词(等价于在 pi-web 输入框里发消息),让它继续干活。会话没在运行时 pi-web 会自动把它拉起来。默认发完就返回;wait_seconds>0 时会等这一轮跑完并带回最后的助手回复。注意:这会让对方 agent 真正执行操作(改文件、跑命令),发之前确认会话选对了。

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes要发送的提示词正文
sessionYes会话 id / id 前缀 / 名称
wait_secondsNo等待这一轮结束的秒数,0=不等待(默认),建议 120~300
streaming_behaviorNo会话正在流式输出时:steer=插话纠正,followUp=排队等它说完;不传则由 pi-web 决定

TDQS

A4.1/5.0
Behavior4/5

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

Adds real value beyond the annotations: it discloses the auto-restart behavior, the default non-blocking return, what wait_seconds changes about the response, and warns that the target agent will actually mutate files/run commands. This is meaningful operational context even though the annotations already establish non-read-only/non-destructive.

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-loads the core action, then adds runtime behavior, then the safety warning. It is a bit long but every clause conveys distinct information, with no repetition of the name or title.

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 tool with no output schema, the description explains the two return modes (immediate vs. final assistant reply with wait_seconds). Combined with the 100%-covered schema and annotations, an agent has enough to invoke it safely.

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 100%, so all four parameters are already documented in the schema. The description restates wait_seconds semantics and notes streaming_behavior defaults to pi-web's decision, adding little beyond what structured data provides; baseline 3 applies.

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 (发送提示词) and resource (已有会话) and clarifies the equivalence to typing in the pi-web input box. It is clearly separable from read-only siblings like piweb_wait_for_reply and piweb_watch_session.

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?

Gives clear operating context: the session is auto-started if not running, default behavior is fire-and-return, and wait_seconds>0 blocks for the turn. It advises confirming the right session before sending, but does not explicitly name alternatives (e.g., wait_for_reply) for retrieving the answer.

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

piweb_set_model给会话换模型A
Idempotent

切换某个会话接下来使用的模型(等价于界面上的模型选择)。会话没在运行时会被拉起来。取值先用 piweb_list_models 查。

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionYes会话 id / 名称
model_idYes模型 id,如 deepseek-flash
providerYes模型 provider,如 new-api-half / opencode / deepseek

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, openWorldHint=true and idempotentHint=true, so mutation and idempotency are already covered structurally. The description adds a genuinely useful side-effect disclosure: a non-running session will be started as a result of the call, which the annotations do not convey. It omits any note on permissions or behavior on an invalid model id.

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, no filler, with the core effect stated first, the side effect second and the prerequisite lookup last. Every sentence carries distinct 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 three-required-parameter mutation with no output schema, the description covers effect, side effect and prerequisite adequately. It leaves open whether the change applies to an in-flight turn and what an invalid provider/model_id yields, minor gaps for this tool's complexity.

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 100%, with each of session, model_id and provider documented inline including examples, so the schema does the heavy lifting. The description adds only the provenance hint (values come from piweb_list_models), which is a mild but real addition beyond the schema. Baseline 3 applies.

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 and resource (switch the model a session will use next) and anchors it to a familiar UI equivalent, so the agent immediately knows the effect. It also names the sibling piweb_list_models as the value source, distinguishing it from read-only siblings like piweb_list_models or piweb_get_session.

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?

Explicitly directs the agent to call piweb_list_models first to obtain valid provider/model_id values, which is actionable usage guidance. It does not state when not to use it (e.g. mid-turn, or sessions where the model is locked), so it stops short of full when/when-not coverage.

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

piweb_statuspi-web 连接自检A
Read-only

检查 MCP 到 pi-web 的连接配置是否正常:地址、密码来源、会话总数、运行中的会话、读写边界(是否只读、允许写入的项目根)。连不上时先用这个排查。

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?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered; the description adds non-obvious value by enumerating the diagnostic fields returned (address, password source, session counts, read/write boundary and writable project roots). It does not describe output shape in detail, but with readOnly annotations and no output schema this is a solid disclosure.

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 purpose, then a colon-delimited field list, then a short usage cue. Dense but every clause adds information; the field enumeration is slightly listy but earns its place by standing in for a missing output schema.

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

Completeness5/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 must supply the return-value picture, and it does so by naming the diagnostics reported. An agent knows what a successful check yields and what it means for the read-only/writable-root boundary.

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?

Zero parameters, so there is nothing to document; the baseline for a no-param tool applies. No misleading parameter claims are made.

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+resource ("检查 MCP 到 pi-web 的连接配置") and enumerates exactly what is inspected: address, password source, session totals, running sessions, and read/write boundaries. No sibling tool performs a connection/config health check, so it is clearly distinguishable from the session/file/git tools.

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?

Explicit trigger given: "连不上时先用这个排查" – use it first when the connection fails. Clear usage context, though it does not name which sibling to fall back to after the check passes or what a failed check implies for subsequent calls.

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

piweb_triage会话分诊(谁在等我 / 谁半途死了)A
Read-only

不经过模型,纯按「最后一条消息是谁 + 是否有悬挂的工具调用 + 多久没动」把会话分诊成:🟠等我回答(扩展弹窗)、❓可能在问我(最后一条助手消息带问号)、⚠️半途停下(最后一轮没有助手收尾)、💤停滞(半途停下且很久没动)、🟢在跑、💬等我下一步。每条都给判定依据,可复现、可核查。这是回答「现在还有多少对话在等我」最快的一招。默认只看最近 3 天有过活动的会话。

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo只看某个项目目录(前缀匹配)
limitNo最多分诊多少个会话,默认 40(按最近活动取)
sinceNo只看该时间之后有更新的,默认 3d;传 all 表示不限时间
per_groupNo每组最多列几个,默认 8
include_emptyNo是否包含没有任何消息的空会话,默认 false
stalled_hoursNo多久没动算「停滞」,默认 6 小时
include_subagentsNo是否包含子代理会话,默认 false

TDQS

A4/5.0
Behavior4/5

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

Beyond readOnlyHint/openWorldHint, the description discloses the important behavioral trait that triage is rule-based and model-free ('不经过模型'), so results are deterministic, and that every bucket entry carries its justification ('可复现、可核查'). It does not cover ordering within groups, output size limits, or whether subagent sessions skew counts beyond the schema default.

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 mechanism and the bucket taxonomy, then the use-case pitch and the default window — order is sensible and the emoji list earns its space as the output contract. It is a dense run-on with some redundancy between the bucket definitions and the '这是…最快的一招' closing line.

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

Completeness5/5

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

Seven all-optional parameters and no output schema, but the description supplies the missing output shape (six named groups plus per-entry evidence) and the default scoping, which is exactly what an agent needs to call it blind. Nothing material is left dangling.

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 100%, so every parameter is already documented, and the description adds only the default 3-day window and the notion that 'stalled' combines an unfinished turn with idle time (tying loosely to stalled_hours). It says nothing about per_group, cwd prefix matching, or include_empty/include_subagents behavior beyond what the schema states.

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 concrete verb (triage) and the exact rule set applied (last message author + dangling tool calls + idle time), then enumerates the six output buckets with emoji labels. An agent knows precisely what comes back, but no sibling tool (e.g. piweb_list_unread or piweb_agent_state, which plausibly overlap) is named to draw the boundary.

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 explicitly recommends itself for one question — 'how many conversations are waiting on me' — and calls itself the fastest option, which is usable routing guidance. It also states the default 3-day activity window as a usage constraint, but gives no when-not conditions or named alternatives for the overlapping wait/unread tools.

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

piweb_wait_for_reply等待会话这一轮结束并取回复A

轮询某个会话,等它这一轮跑完(不再流式输出),然后返回最后的助手回复文本。适合先 piweb_send_message 不等、之后再来收结果。

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionYes会话 id / 名称
max_charsNo回复文本截断长度,默认 20000
poll_secondsNo轮询间隔,默认 3
timeout_secondsNo最长等待秒数,默认 180

TDQS

A4/5.0
Behavior4/5

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

Annotations are minimal (readOnlyHint=false, openWorldHint=true), so the description carries most of the burden and does add real value: it discloses that the tool polls, blocks until streaming output stops, and returns only the last assistant reply. It does not say what happens on timeout (partial reply? error?) or whether the wait consumes/marks the reply, which are the remaining behavioral gaps.

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 sentences, no filler, and the mechanism (poll until streaming ends, return final reply) is front-loaded before the recommended workflow. Every clause earns its place.

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?

No output schema exists, and the description does cover the return value ('final assistant reply text'), which is the key missing piece. What it omits is failure/timeout behavior for a long-polling tool with a configurable timeout, which an agent would want to know before relying on it.

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 100%, so session, max_chars, poll_seconds and timeout_seconds are already documented with types, bounds and defaults. The description adds no parameter-level detail (e.g., interaction between timeout_seconds and poll_seconds, or what max_chars truncation does to the reply). Baseline 3 applies when the schema does the heavy lifting.

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: poll a session until its current round finishes streaming, then return the final assistant reply text. The blocking/polling semantics are clear. It doesn't explicitly distinguish itself from the sibling piweb_watch_session, which is a plausible alternative for the same session, so it falls short of a 5.

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?

Explicitly prescribes the workflow: call piweb_send_message without waiting, then come back to this tool to collect the result. That names both the pattern and the companion tool. It gives no exclusion guidance (e.g., when to prefer piweb_watch_session or piweb_list_unread instead), so it is clear context without alternatives.

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

piweb_watch_session实时看会话正在输出什么A

订阅会话的事件流,在指定秒数内收集正在生成的内容(文本增量、思考增量、工具调用),返回期间累计的文本。适合「它现在跑到哪了」。注意:会话没在运行时订阅会把它拉起成一个空闲进程(等同在 pi-web 打开该会话)。

ParametersJSON Schema
NameRequiredDescriptionDefault
secondsNo监听时长秒数,默认 30
sessionYes会话 id / 名称
until_idleNo会话跑完就提前结束(最多仍受 seconds 限制),默认 true
include_thinkingNo是否也收集思考增量,默认 false

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false / openWorldHint=true; the description explains why it is not a pure read by disclosing that subscribing to a non-running session spins it up as an idle process, equivalent to opening it in pi-web. It also discloses exactly what is captured during the window and what is returned (accumulated text), which is the key behavioral context an agent needs.

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 sentences, zero padding: core action first, then the usage cue, then the side-effect warning last. The ordering is front-loaded and each sentence carries distinct information.

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

Completeness5/5

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

With no output schema, the description still states the return value (accumulated text over the window), explains the collection modes, and warns about the process-start side effect. Nothing an agent needs to invoke this correctly is missing.

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 100%, so all four parameters (seconds, session, until_idle, include_thinking) are already documented in the schema. The description loosely echoes the collection modes ('思考增量' maps to include_thinking) but adds no syntax, default, or interaction detail beyond the schema, so the baseline 3 applies.

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 names a specific verb and resource (subscribe to a session's event stream and collect generated content for N seconds) and states the scope of what is captured (text deltas, thinking deltas, tool calls). The 'where is it now' framing clearly separates it from static siblings like piweb_get_session or piweb_status.

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 gives a concrete when-to-use cue ('适合「它现在跑到哪了」'), which points the agent at live monitoring rather than a snapshot. It does not, however, name an explicit alternative (e.g., piweb_get_session for a one-shot read, piweb_wait_for_reply for blocking) or state when not to use it.

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. 25 tool updatesv1.1.0
    • First observedpiweb_abort_session
    • First observedpiweb_agent_state
    • First observedpiweb_auto_name_session
    • First observedpiweb_create_session
    • First observedpiweb_delete_session
    • First observedpiweb_export_session
    • First observedpiweb_fork_session
    • First observedpiweb_get_session
    • First observedpiweb_git_diff
    • First observedpiweb_git_status
    • First observedpiweb_list_files
    • First observedpiweb_list_models
    • First observedpiweb_list_projects
    • First observedpiweb_list_sessions
    • First observedpiweb_list_unread
    • First observedpiweb_mark_read
    • First observedpiweb_read_file
    • First observedpiweb_rename_session
    • First observedpiweb_search_sessions
    • First observedpiweb_send_message
    • First observedpiweb_set_model
    • First observedpiweb_status
    • First observedpiweb_triage
    • First observedpiweb_wait_for_reply
    • First observedpiweb_watch_session

TDQS

A3.8/5.0

Scored across 25 tools

Disambiguation4/5

Most tools target distinct verbs/resources, and descriptions explicitly cross-reference each other (e.g. list_unread vs triage vs list_sessions' unread filter). A few pairs still have fuzzy boundaries (watch_session vs wait_for_reply, list_unread vs triage), but the docs make the distinctions workable.

Naming Consistency5/5

Every tool uses the same piweb_ prefix and a clean snake_case verb_noun pattern (list_sessions, get_session, delete_session, set_model). No convention mixing or vague names anywhere.

Tool Count3/5

25 tools is on the heavy side for this surface. The domain is genuinely broad (sessions, messaging, files, git, models), but a few tools feel like they could merge, pushing it toward overload.

Completeness4/5

Strong lifecycle coverage: create/delete/fork/rename/export sessions, send/wait/watch messages, triage/unread/state inspection, model listing and switching, file and git inspection. Minor gaps like mutating thinking level or session config post-creation exist but are workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP hosts like Claude Code and Codex to spawn, manage, and interact with persistent, reusable Pi coding-agent sessions, supporting task dispatch, status checks, and session lifecycle control.
    2 npm
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes authorized ChatGPT, DeepSeek, Kimi, and Grok web sessions to agents as MCP tools, including chat and local file attachments over HTTP or stdio.
    7
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    Enables AI agents to create and control persistent terminal sessions, run and monitor asynchronous jobs, page through ordered event history, and resolve registered device connection details without exposing stored secrets. Exposes 15 MCP tools over stdio that mirror a REST API, keeping session state alive independently of the agent that started it.
    15
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables unified access to multiple coding-agent CLIs via MCP, with tools for running prompts, managing sessions, and retrieving task outputs.
    MIT