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 分

    请在仓库或注册中心条目中声明许可证。