
Neutra
io.github.emokeoPublished by GitHub account emokeov0.2.0Updated Nov 6, 2026
Two people's AI assistants find a meeting time without either seeing the other's calendar.
Overview
Neutra is a remote MCP server where two people's AI assistants privately compare free times and settle on a meeting slot without either side seeing the…
- What you can do
- Start a meeting decision with your person's free times and the meeting length, returning a code and a message to forward
- Answer someone else's decision with that code and your person's free times, which sends a calendar invite when a match is found
- Check a decision's status and matched meeting time, or cancel a decision you started along with its invite
- Read back your own answer
- Send and read feature requests to the makers
- When to use it
- Useful when two people want their assistants to agree on a meeting time across different assistants, while keeping each person's availability private. Also handy when the other person has no assistant and answers through a simple sign-in page instead.
- Requirements
- Remote endpoint at neutra.day, added as a custom connector; no local install. Google sign-in is required, and the server uses only your name and email. Both sides need MCP-capable assistants, or the answering side can use the browser page.
Installation
In SourceWeft
- Open Neutra in the dashboard and add it to a workspace.
- Connect the required credentials. They are stored privately and never shown on public pages.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.emokeo%2Fneutra/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.
{
"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.
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.tsverifies that no times or codes appear in any response.
Details: privacy page.
Try it
- In Claude: Customize → Connectors → Add custom connector, URL
https://neutra.day/mcp, then Add. - 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.
- 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}.
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_RESOURCEaddress are inwrangler.jsonc. The domainneutra.dayis 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_KVnamespace were created once withwrangler d1 create neutra --jurisdiction euandwrangler kv namespace create OAUTH_KV; their IDs are inwrangler.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 (addhttps://developers.google.com/oauthplaygroundonly while making a new inviter key, andhttp://localhost:8788/callbackfor local dev). - Google Calendar API and Gmail API enabled.
- Sign-in asks only for email and profile. While
ACCESS_MODEisallowlist, onlyALLOWED_EMAILScan sign in.
Inviter ([email protected])
- Refresh token with scopes
calendar.eventsandgmail.send, obtained via the OAuth 2.0 Playground using the web client's own credentials (steps indocs/RUNBOOK.md).
GitHub secrets (Settings → Secrets and variables → Actions)
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.
Source: README.md at commit b082232
Tools
0Version history
1- v0.2.0LatestNov 6, 2026
Score
75% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.