Neutra

io.github.emokeo由 GitHub 帳號 emokeo 發布v0.2.0更新於 Nov 6, 2026

Two people's AI assistants find a meeting time without either seeing the other's calendar.

已驗證Streamable HTTP可網頁執行效率與工作流溝通與協作

概覽

AI 產生的概覽

Neutra 是遠端 MCP 伺服器,讓兩人的 AI 助理在不查看彼此行事曆的情況下私下比對空閒時間並敲定會議時間。

可以做什麼
  • 以本人的空閒時間與會議長度發起決策,回傳一組代碼與可轉傳的訊息
  • 用該代碼與本人的空閒時間回覆他人的決策,配對成功時寄出日曆邀請
  • 查詢決策狀態與配對到的會議時間,或取消自己發起的決策及其邀請
  • 讀取自己送出的回覆
  • 向開發者送出並查看功能請求
適用情境
適合兩人希望由各自的助理跨不同助理協調會議時間、同時維持彼此空閒時間私密的情況。對方沒有助理時,也可透過簡單的登入網頁回覆。
執行需求
遠端端點 neutra.day,以自訂連接器加入,無需本機安裝。需要 Google 登入,伺服器只使用你的姓名與電子郵件。雙方都需支援 MCP 的助理,或由回覆方改用瀏覽器頁面。
安裝前請注意
以 Google 登入會把姓名與電子郵件提供給該服務。伺服器透過自己的邀請帳號代寄日曆邀請與郵件,配對成功會在你的日曆建立活動。你發起的決策可取消,時間資料保留至決策確定或最多 14 天。使用有頻率限制。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Neutra,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.emokeo%2Fneutra/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "neutra": {
      "type": "http",
      "url": "https://neutra.day/mcp"
    }
  }
}

README

Neutra

A neutral place where people's AI assistants agree on things for them, without anyone seeing anyone else's data.

Today it does one thing: two people's assistants find a time to meet. Each assistant tells Neutra when its person is free. Neutra finds a common time and sends one calendar invite to both. Neither side ever sees the other's times.

mermaid
sequenceDiagram    participant A as Anna's assistant    participant N as Neutra    participant B as Ben's assistant    A->>N: Anna's free times    N-->>A: a message for Anna to forward to Ben    Note over A,B: Anna forwards it in any chat    B->>N: Ben's free times + the code    N-->>A: calendar invite    N-->>B: calendar invite

It works across assistants: Anna can use Claude and Ben another assistant, as long as both support MCP connectors. Ben can also answer without an assistant: the message includes a link to a simple page where he signs in with Google and adds the times he's free.

Privacy, by design

  • No AI on Neutra's side. Neutra is plain code that compares time ranges. Your times never go into an AI model of ours.
  • Nobody sees anyone's times. Only the matched meeting time comes back. The other person's times are never returned, and the code is stored only as a hash.
  • Times are deleted as soon as a decision is settled, at the latest after 14 days. The person answering never has their times stored at all.
  • Retries can't map a calendar. The person answering gets at most 3 tries, and each answer must cover at least twice the meeting length, so nobody can probe your free time slot by slot.
  • Data stays in the EU, in Cloudflare's EU jurisdiction.
  • Checked by tests: test/decisions.test.ts verifies that no times or codes appear in any response.

Details: privacy page.

Try it

  1. In Claude: Customize → Connectors → Add custom connector, URL https://neutra.day/mcp, then Add.
  2. Sign in with Google. Neutra uses only your name and email: to send the invite to the right address, and so that only you can answer.
  3. Ask: "Use Neutra to find an hour with Ben next week. I'm free Tuesday and Thursday, 18:00–21:00." Forward the message it gives you.

For agent builders

A remote MCP server with Google sign-in. Resources follow Google's AIPs: decisions/{decision} and decisions/{decision}/answers/{answer}.

ToolWhat it does
create_decisionStart a decision with your person's free times and the meeting length. Returns a code and a message to forward.
create_answerAnswer with the code from the message (neutra:<id>.<code>) and your person's free times. A match sends the invite.
get_decisionStatus (WAITING, NO_MATCH, INVITE_SENT, ACCEPTED, DECLINED, EXPIRED) and the meeting time.
delete_decisionCancel a decision you started, including its invite.
get_answerRead your own answer.
create_feature_requestTell Neutra's makers about something your person wanted that Neutra can't do yet.
get_feature_requestRead a feature request you sent.

Errors use google.rpc codes: NOT_FOUND, PERMISSION_DENIED, FAILED_PRECONDITION, INVALID_ARGUMENT, RESOURCE_EXHAUSTED (a daily or hourly limit was reached).

Running Neutra

Runs on Cloudflare Workers with D1, based on Cloudflare's remote-mcp-google-oauth template. Every push to main is type-checked, tested and deployed by GitHub Actions (.github/workflows/deploy.yml); migrations in migrations/ are applied before each deploy. Changes go through pull requests.

Setup (done once)

Cloudflare

  • Account ID and the MCP_RESOURCE address are in wrangler.jsonc. The domain neutra.day is attached to the Worker as a Custom Domain in the Cloudflare dashboard.
  • API token: "Edit Cloudflare Workers" template plus D1: Edit.
  • The D1 database (EU jurisdiction) and the OAUTH_KV namespace were created once with wrangler d1 create neutra --jurisdiction eu and wrangler kv namespace create OAUTH_KV; their IDs are in wrangler.jsonc.

Google Cloud (project neutra)

  • Google Auth Platform: audience External, publishing status In production (testing mode makes refresh tokens expire after 7 days). Branding: home page and privacy links above, authorized domain neutra.day.
  • Web client with redirect URI https://neutra.day/callback, used by both the connector sign-in and the browser answer page (add https://developers.google.com/oauthplayground only while making a new inviter key, and http://localhost:8788/callback for local dev).
  • Google Calendar API and Gmail API enabled.
  • Sign-in asks only for email and profile. While ACCESS_MODE is allowlist, only ALLOWED_EMAILS can sign in.

Inviter ([email protected])

  • Refresh token with scopes calendar.events and gmail.send, obtained via the OAuth 2.0 Playground using the web client's own credentials (steps in docs/RUNBOOK.md).

GitHub secrets (Settings → Secrets and variables → Actions)

SecretWhat
CLOUDFLARE_API_TOKENCloudflare API token
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETWeb client
COOKIE_ENCRYPTION_KEYAny long random string
ALLOWED_EMAILSComma-separated emails of the test users
INVITER_REFRESH_TOKENInviter's refresh token

Local development

npm install, copy .dev.vars.example to .dev.vars and fill it in, then npm run dev. Test with npx @modelcontextprotocol/inspector@latest against http://localhost:8788/mcp.

License

MIT, see LICENSE. Includes code from Cloudflare's MIT-licensed templates.

來源:README.md,提交 b082232

工具

0
該伺服器需要登入,因此 SourceWeft 無法在沒有帳號的情況下讀取其工具,也未收錄。已連接帳號所能看到的內容可能因帳號及其權限而異。

版本歷史

1
  1. v0.2.0最新Nov 6, 2026

評分

已滿足適用檢查項的 75%

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

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。