
Proceed Mcp
io.github.renl由 GitHub 帳號 renl 發布v0.1.0-preview.1更新於 Nov 5, 2026
Preview Telegram approval broker for MCP clients; live first use unverified.
概覽
預覽版 MCP 伺服器:把核准請求送到私人 Telegram 聊天,並將配對使用者的核准、拒絕或回覆結果傳回正在等待的工具呼叫。
- 可以做什麼
- 準備、發起並追蹤核准:保留請求識別、向 Telegram 送出問題並等待人工決定
- 讀取與取消待處理核准,並對已回傳的決定進行確認
- 記錄 approved、rejected、responded、expired、cancelled 等結果與投遞狀態
- 執行本機 broker 與配對指令:初始化受保護狀態、新增 owner、配對私聊、查看狀態
- 適用情境
- 當助理在執行敏感操作前需要暫停,並透過 Telegram 在手機上取得明確的人工決定,且結果要在同一次工具呼叫中回傳時使用。適合願意試用預覽版的單一使用者本機環境。
- 執行需求
- Node.js 24 或更新版本;npm 套件可全域安裝或以 npx 執行。需要一個專用 Telegram 機器人權杖,僅透過 broker 行程環境變數 PROCEED_TELEGRAM_BOT_TOKEN 提供,並需要一個與該機器人的私聊。broker 與 MCP 轉接器須在同一台機器上執行;需要倉庫之外的絕對狀態目錄;Windows 上需 powershell.exe 與 icacls 進行 ACL 檢查。需能連線 api.telegram.org。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Proceed Mcp,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
proceed-mcp
An MCP server that sends an approval request to a private Telegram chat and returns the paired
human's decision through the waiting MCP call. The human can Approve, Reject, or Respond from
Telegram. proceed-mcp records the outcome. It does not execute the requested action.
Preview status: @meshimize/[email protected] is published on npm. Live use is not
verified. The source has offline test evidence on Windows with Node 24.22.2. Publication was a
manual step performed before the change merged. Both the preview and latest dist-tags currently
point to this version, because npm rejected a request to remove latest with HTTP 400. Pin the
exact version instead of relying on either tag. No real Telegram pairing, question delivery, human
decision, OpenCode V2 host run, or clean public npm installation has been verified for this preview.
The implemented scope is the loopback broker, private Telegram pairing and question display,
Approve/Reject/Respond, expiry, cancellation, capability-authorized retrieval, and acknowledgement.
MCP Events, automatic continuation after a timeout, doctor, and retry are not implemented in this
preview.
Distribution
@meshimize/proceed-mcp is the npm package for this product. It installs the proceed-mcp command
and its runtime sources. It is not a hosted MCP endpoint, and there is no cloud broker. The MCP
adapter and the broker run on your machine. The broker listens only on 127.0.0.1 and calls
https://api.telegram.org for Telegram.
The published npm artifact is the public preview @meshimize/proceed-mcp version
0.1.0-preview.1. It was published under the preview dist-tag, and the latest tag also points
to it: npm rejected a request to remove latest with HTTP 400. Pin the exact version rather than
depending on either tag. This was a manual publication performed before the change merged, not a
release-workflow result. Guarded publication through release automation is planned but not
implemented, and no automated publishing has run.
An official MCP Registry listing is an approved delivery task for this preview, tracked and
reported separately from npm package publication. A listing is discovery metadata only: it would
point to the npm package and would not host or run the broker. It is planned only after the npm
preview is published and its exact-version installation check passes. The selected listing name is
io.github.renl/proceed-mcp for the repository https://github.com/renl/proceed-mcp. That
selection requires confirmed registry namespace and registry publishing rights, which remain
unresolved, and it asserts no registry authentication or schema validation. No listing has been
published, and no registry delivery is verified. A blocked or pending listing does not change or
hide the npm publication result.
Requirements
- Node.js 24 or newer.
package.jsondeclares>=24. This preview was exercised only on Windows with Node 24.22.2. Other operating systems and Node versions are untested. - One dedicated Telegram bot and one private chat with that bot. Do not share the bot with another poller or a webhook.
- The broker and the MCP adapter must run on the same machine. The human may be remote.
- On Windows,
powershell.exeandicaclsmust be available for the owner-only ACL check. On POSIX, the state directory must support owner-only mode bits. - No build tool, native addon, or postinstall script is required.
Install
Install the exact preview version globally:
Or run it without a global install:
The scoped package installs the same proceed-mcp command. Version 0.1.0-preview.1 is published
under the preview tag, and the latest tag also points to it, so pin the exact version rather
than relying on either tag. A successful install is the first release check, not proof that the
live approval flow works, and a clean public installation is not verified.
Set up the broker and Telegram
1. Create protected state
Choose an absolute directory that is empty or does not exist yet. Keep it outside the repository.
init creates a protected config.json, a local control credential, and an empty journal. It
refuses to overwrite existing state. It prints the state path, never a credential value.
2. Add one owner
The owner is the transport principal used by the MCP adapter.
<owner-id> must match [a-z0-9_-]{1,64}. The label is display-only and appears in Telegram. Run
this before the first serve, because owner add refuses while a broker ownership record exists.
Owner records and credentials are immutable.
3. Create a dedicated Telegram bot
Create a new bot with @BotFather and keep its token private. Use this bot only for this broker. Do
not configure a webhook for it and do not run another poller against it. proceed-mcp never deletes
a webhook and never rewinds or drops pending updates. If Telegram reports a competing consumer,
Telegram processing stops with a diagnostic, and you must repair the bot and restart serve.
4. Start the broker in the foreground
Put the token only in the broker's own process environment.
PowerShell:
POSIX:
Wait for proceed-mcp: broker ready on http://127.0.0.1:43189 and the state directory line. Leave
this terminal open.
The token is read only from the broker process environment. It is never stored in the state
directory, the journal, Telegram, or the request history. The product does not read .env files.
Never put the token in the MCP adapter's environment or in the MCP client configuration.
If the token is missing or empty, the broker still starts locally and prints a warning. A request
cannot be created until a human is paired, so complete Telegram setup before testing. If the token is
rejected, or another consumer owns the bot, Telegram processing stops with a diagnostic while the
local broker keeps running. Fix the bot and restart serve.
5. Pair the private chat
In a second terminal:
The command prints Pairing code: and Expires at:. In a private chat with the bot, send /start,
then send exactly /pair <code> before the expiry. Group chats are refused. /start alone grants
nothing. A bot-suffixed or malformed command does not pair. The code is one-use, valid for five
minutes, and is not stored in plaintext.
Only the first pairing succeeds. There is no in-chat re-pair or identity change.
6. Connect an MCP client
OpenCode V2
Add a local server under mcp.servers in opencode.jsonc. This shape follows the
OpenCode V2 MCP documentation.
Replace <owner-id> and the state path. On Windows, escape backslashes or use forward slashes in
the JSON string. codemode: false exposes the tools directly. OpenCode reloads MCP configuration
after a save. Check the connection with opencode mcp list.
The --package argument selects the scoped npm package, and the argument after -- is the
proceed-mcp command from that package. If you installed the package globally, start the command
array with proceed-mcp and keep the same mcp --owner ... --state-dir ... arguments.
With this server name, OpenCode exposes the tools as proceed_prepare_approval,
proceed_request_approval, proceed_get_approval, proceed_cancel_approval, and
proceed_acknowledge_approval. If you leave Code Mode enabled, OpenCode groups them under
tools.proceed.
Do not add PROCEED_TELEGRAM_BOT_TOKEN to environment. The adapter does not need it and must not
receive it.
Other stdio MCP clients
Use this command in any client that can start a local stdio server:
To run the published version without a global install:
The adapter needs no OpenCode API, password, provider credential, or proprietary session metadata.
It connects only to the local broker. Keep serve running.
The server advertises MCP protocol 2025-11-25 and exposes five tools: prepare_approval,
request_approval, get_approval, cancel_approval, and acknowledge_approval.
MCP tools
action accepts 1-1000 Unicode scalars, context accepts 0-1000, and session_label accepts 1-128.
client_request_id must match [A-Za-z0-9_-]{1,128}. expires_in_seconds is an integer from 60 to
86400 and defaults to 3600.
request_approval is the waiting call. It returns the actual outcome, not a creation receipt.
prepare_approval alone sends no Telegram question and creates no actionable request.
A normal agent flow is:
- Call
prepare_approvaland keep the returnedrequest_handle,request_id, andrequest_capabilitytogether. - Call
request_approvalwith that handle and capability, a uniqueclient_request_id, the exact action, and enough context for the human to distinguish the request. - Use the returned
resolutionanddelivery_state. The call returns the human outcome itself. - If the result contains a
decision_id, acknowledge that exact decision withacknowledge_approval. - Act only when the outcome is
approved, and only within your own permission rules.
The request capability, together with its owner principal, authorizes later get_approval,
cancel_approval, and acknowledge_approval calls. Never put it in Telegram, assistant messages,
logs, session_label, action, or context. Those text fields are displayed in the Telegram
question. A label is caller-supplied display context, not authenticated identity.
Sharing the capability with another context under the same owner grants that context access to that one request. It does not redirect the original waiting call and does not authorize a different owner.
Decisions and delivery
Only an explicit Approve grants approval. Reject records rejection. Respond records
request-specific instructions only after valid correlated text. To send instructions, press Respond
and reply to its prompt, or send exactly /respond <request_id> <text>. Approval-like words in
Respond text never grant approval. Respond text is stored and returned exactly, including
whitespace.
Each request has at most one resolution. Duplicate updates and competing choices do not replace it.
Before acting, deduplicate on (request_id, decision_id).
A client or transport timeout does not cancel or expire the request. A lost waiting call does not
cancel it either. Keep the retained request identity and capability, then use get_approval in a
later turn to read the unchanged outcome. Retrieval does not wake an agent or start a new assistant
turn.
MCP Events are unsupported in this preview. There is no automatic resumption after a timeout and no automatic session reattachment. An approval records an outcome. It does not execute the action.
delivery_state describes reporting, not the decision:
not_applicable: no terminal decision yet.pending: a decision is recorded but delivery is not confirmed.returned: the adapter reported writing the result to the original call. Receipt is not confirmed.confirmed: a request-capability holder acknowledged that decision.unavailable: automatic delivery is unavailable. Retrieve with the retained capability.blocked: delivery is blocked. Checkproceed-mcp status.
First manual test
Use a harmless action. The product never executes it.
- Keep
serverunning and the MCP client connected. - In a new agent session, ask for
prepare_approval, thenrequest_approvalwithclient_request_idmanual-approve-1, actionReport the text PROCEED TEST, contextHarmless first-use check. Do not modify files., andexpires_in_seconds300. - While the second call is still waiting, press Approve in Telegram.
- Expect that waiting call to return
resolution: approvedwith the samerequest_id. Acknowledge the returneddecision_idwithacknowledge_approval. No file or command action needs to run. - In the next assistant turn, check the follow-up acknowledgement. It must name the same
request_idand the recorded outcomeapproved. It must not repeat therequest_capabilityand must not perform the action. This is a required manual check, not a verified preview result. - Repeat with a fresh prepared handle and
client_request_idmanual-reject-1, then press Reject. The call should returnrejected, not authorization to perform the action. Check the next assistant turn the same way: matchingrequest_idand outcomerejected, no capability echo, no action. - Repeat with
manual-respond-1. Press Respond, reply to the prompt with the exact textRead only. Do not modify files., and confirm the call returnsrespondedwith that text unchanged. Approval-like words in that text remain instructions. Check the next assistant turn for the matchingrequest_idand outcomeresponded, which records instructions rather than approval, with no capability echo and no action.
If a waiting call times out before you choose, the request stays pending until its deadline. Use
get_approval with the retained request_id and request_capability in a later turn. Retrieval
will not wake the agent.
Finish by pressing Ctrl+C once in the broker terminal and waiting for proceed-mcp: broker stopped.
Commands
doctor is not implemented and fails as an unknown command. The older origin add command in the
help output belongs to the retired origin-based configuration and refuses this state. Use owner
mode.
Exit codes are 0 for completion, 2 for invalid arguments or configuration, 3 for an unavailable
prerequisite, and 4 for a storage or integrity failure. Diagnostics go to stderr. MCP stdout
carries protocol frames only.
State, privacy, and shutdown
The state directory and its files are restricted to the current OS account. init, owner add, and
serve verify that protection and fail rather than continue if it cannot be established. The
Windows check uses an owner-restricted ACL through PowerShell and icacls. POSIX uses owner-only
mode bits.
The journal stores request text, response text, pairing identifiers, decisions, timestamps, and delivery state. Treat the state directory as sensitive local data. Back up a stopped broker's entire state directory. This preview has no history deletion or compaction.
Request capabilities are stored only as SHA-256 verifiers. The plaintext capability exists in the tool result and in your retention. Credential and token values are never printed by a command.
The broker binds only 127.0.0.1, requires a credential on every route, and rejects browser origins.
There is no public broker listener and no remote broker hosting.
Stop the broker with Ctrl+C and wait for proceed-mcp: broker stopped. A clean stop releases the
ownership record. If shutdown fails or the process is killed, broker.lock may remain and the next
serve refuses to start. Preserve the protected state directory and do not delete the lock or the
journal. There is no automatic stale-lock recovery in this preview.
Common failures
BROKER_UNAVAILABLE: startserve, or check that the adapter and the broker use the same--state-dir.NOT_PAIRED: complete/pairbefore creating a request.NOT_FOUND: wrong owner or state directory, an unused handle, or a request capability that does not match.DECISION_MISMATCH: the request is not terminal, or thedecision_iddoes not match.- Telegram processing stopped: check the bot token and confirm no webhook or second poller owns the
bot. Restart
serveafter repair.
Limits
- One paired human and one bot token per broker. Only the first pairing succeeds. There is no in-chat identity change or re-pair.
- One broker per state directory. A separate owner is a separate transport principal, not another human or bot.
- No hosted service and no remote broker. The broker is loopback-only.
- MCP Events are unsupported. There is no automatic continuation after a tool timeout, and a timeout does not cancel the request.
- Retrieval does not wake an agent and does not create a new decision.
- The product does not execute actions and does not enforce OpenCode's permission rules. Approval is cooperative.
- No recovery of an exited MCP client or harness process, and no automatic session reattachment.
- OpenCode V2 is the first validation harness. Other harnesses are not tested. The generic stdio command is available, but no multi-harness compatibility is claimed.
- Node.js 24 or newer is the manifest floor. Only Windows with Node 24.22.2 has offline test evidence. Do not assume other operating systems or Node versions are supported.
doctoris not implemented.retryreports unavailable.- The npm preview is published. A clean public install, and live Telegram or OpenCode results, are not verified.
License
MIT, copyright 2026 Ng Cheng Leong. The release package must include the standard MIT LICENSE
file at its root.
來源:README.md,提交 de1c580
工具
0版本歷史
1- v0.1.0-preview.1最新Nov 5, 2026
評分
已滿足適用檢查項的 40%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。