Formwire

io.github.CloudCorpRecords由 GitHub 帳號 CloudCorpRecords 發布v0.1.0更新於 Nov 7, 2026

Create and wire up contact forms from your agent: snippets, forms, and submissions.

已驗證STDIO僅桌面開發者工具商業與電商

概覽

AI 產生的概覽

連接 Formpaste 的在地橋接服務,讓助理建立聯絡表單、取得框架程式碼片段、檢視表單設定並讀取送出紀錄。

可以做什麼
  • 建立表單並回傳存取金鑰與已接好的程式碼片段
  • 為 html、react、nextjs、astro、vue 或 svelte 產生可直接貼上的表單片段
  • 列出並讀取帳號中的表單,核對收件地址、驗證狀態、允許網域與通知設定
  • 依表單列出送出紀錄,含數量與中繼資料,可選擇包含留言內容
  • 寫入一筆帶標記的測試送出,用來確認表單已上線
適用情境
適合在建置網站時讓助理建立聯絡表單、以正確的存取金鑰嵌入頁面,並在對話中核對設定或查看收到的送出資料。
執行需求
透過 npx 或 Docker 以 stdio 在本機執行,需要能連線到上游 Formpaste 端點。可選設定 FORMPASTE_MCP_URL 覆寫端點,設定 FORMPASTE_API_KEY 以送出 bearer 權杖;未設定時不送出驗證標頭。表單屬於你自己的 Formpaste 帳號,新的收件地址須先在控制台完成驗證才會寄送郵件。
安裝前請注意
API 金鑰會以 bearer 權杖轉送給上游服務,工具呼叫與參數也會一併送出。list_submissions 開啟 includeContent 會回傳第三方個人資料,且需要完整存取權限的權杖。建立表單會觸發新地址的驗證流程,create_form 可能回傳 upgrade_required。此橋接本身不儲存資料。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Formwire,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

formwire

formwire is a small local bridge to Formpaste's hosted MCP server, which wires up contact forms for a site: create a form, get a copy-paste snippet for your framework with the form's access key already filled in, check how a form is configured, and read the submissions that land in its inbox.

The bridge stores nothing itself. It serves the upstream server's tool list locally, exactly as captured from the live endpoint, and forwards each tool call upstream, returning the result untouched. Forms belong to the caller's own Formpaste account: a form's destination address is the owner's own notification address, set once when the form is created, and the test-submission tool only stores a marked test row on the caller's own form - it sends no email.

Tools

  • create_form - create a form and get back its access key plus a wired snippet. Required: name (a human-readable label) and destinationEmail (where submissions are emailed; a new address must be verified in the dashboard before delivery starts). Optional: framework (html, react, nextjs, astro, vue or svelte; defaults to html) choosing the snippet's shape.
  • get_snippet - a copy-paste form snippet for a framework. Required: framework. Optional: formId fills in a real access key; without it a placeholder is used.
  • list_submissions - submissions for one of your forms, as counts plus per-submission metadata. Required: formId. Optional: folder (inbox or spam), limit, and includeContent to include full message bodies.
  • list_forms - every form on your account, each with its id, name, access key and inbox/spam counts. Takes no arguments. Use it to discover form ids.
  • get_form - read one form back to check its wiring: access key, destination and whether that destination is verified yet, allowed domains, and notification, autoresponder and webhook settings. Required: formId. The webhook signing secret is never returned.
  • send_test_submission - store a test submission on your own form to prove it is live. Required: formId. Optional: fields, a flat string map of sample values; omit it for a default payload. Test rows appear in the inbox with a Test badge, send no email, and never count toward quota.

Configuration

  • FORMPASTE_MCP_URL (optional) - override the upstream endpoint. Defaults to https://api.formpaste.com/mcp. (The override hook is this rebuild's own labelled reconstruction.)
  • FORMPASTE_API_KEY (optional) - when set, every upstream request carries an Authorization: Bearer <key> header with a token minted in the Formpaste dashboard. When it is not set, no auth header is sent. (This forwarding is also a labelled reconstruction; the original surface was captured keyless.)

Forwarding mechanics

On the first tool call the client opens a streamable HTTP session with the upstream: a JSON-RPC initialize request (protocolVersion 2025-03-26, clientInfo name formwire), then a notifications/initialized notification, then the tools/call request carrying the caller's arguments unchanged. When the upstream answers initialize with an Mcp-Session-Id header, that value rides on every later request of the session, which is reused for the life of the process. Replies may arrive as plain JSON or as server-sent events; both are read.

Successful upstream results pass through verbatim, including any isError flag the upstream sets. Failures - a JSON-RPC error, a non-2xx status, an unreadable response, or a request that cannot be completed - come back as an isError result whose text starts with formwire error: (this rendering is this rebuild's own labelled reconstruction).

CLI

Each tool is also a subcommand taking one JSON argument string (omit it for tools that take none):

bash
npx @reneturcios/formwire create_form '{"name":"Contact form","destinationEmail":"[email protected]"}'npx @reneturcios/formwire get_snippet '{"framework":"react","formId":"frm_123"}'npx @reneturcios/formwire list_formsnpx @reneturcios/formwire get_form '{"formId":"frm_123"}'npx @reneturcios/formwire list_submissions '{"formId":"frm_123","folder":"inbox"}'npx @reneturcios/formwire --version

Exit codes: 0 on success, 1 on an isError result, 2 on a usage error.

MCP server

bash
npx -y @reneturcios/formwire mcp

MCP client config:

json
{  "mcpServers": {    "formwire": {      "command": "npx",      "args": ["-y", "@reneturcios/formwire", "mcp"]    }  }}

Docker

bash
docker run -i ghcr.io/cloudcorprecords/formwiredocker run --rm ghcr.io/cloudcorprecords/formwire --version

The container's default command is mcp, so the first form is a stdio MCP server; any other arguments reach the CLI normally.

Development

bash
npm installnpm run buildnpm testnpm run dev

The test suite runs entirely against a stubbed JSON-RPC upstream - no live network calls.

License

MIT - see LICENSE.

來源:README.md,提交 f41dc73

工具

6

create_form

Create a Formpaste form and return its access key + a wired snippet. Triggers destination verification for a new address (the owner completes it in the dashboard); an already-verified destination delivers immediately. Errors with: unauthorized, upgrade_required.

輸入參數name必填frameworkdestinationEmail必填

get_snippet

Return a copy-paste form snippet for a framework (html, react, nextjs, astro, vue, svelte). Pass formId to fill in a real access key; otherwise a placeholder is used. Errors with: unauthorized, invalid_framework.

輸入參數formIdframework必填

list_submissions

List submissions for one of your forms. Returns counts + per-submission metadata by default; set includeContent to include message bodies (third-party PII). Errors with: unauthorized, not_found, forbidden. Requires a full-access token.

輸入參數limitfolderformId必填includeContent

list_forms

List all forms on your account, each with its id, name, access_key, and inbox/spam counts. Use this to discover form ids or confirm a form you just created exists. Errors with: unauthorized.

無需輸入參數。

get_form

Read one of your forms to verify it is wired correctly: returns its access_key, destination_email, destination_verified (whether submissions will be emailed yet), allowed_domains, and notification/autoresponder/webhook config. Never returns the webhook signing secret. Errors with: unauthorized, not_found.

輸入參數formId必填

send_test_submission

Store a TEST submission so you can prove a form is live and receiving. Stored only: it appears in the owner's Inbox with a Test badge but sends NO email, runs NO spam scoring, and never counts toward quota. Optionally pass sample fields; omit to use a default payload. Capped at the 5 newest test rows per form. Errors with: unauthorized, not_found, invalid_input, too_many_fields, field_too_large.

輸入參數fieldsformId必填

版本歷史

1
  1. v0.1.0最新Nov 4, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分