Huishouden connector
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Huishouden connectorwhat's on today, and add milk to the groceries list?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Huishouden connector
The connector is a remote MCP server. People add it to their own AI assistant (Claude, ChatGPT, Gemini CLI or any MCP client) to use their Huishouden household from there. They can ask "what's on today?", add groceries, log a pet's feed or a medicine dose, see upcoming bills, or look up the medicines of someone they care for and research them in the assistant.
The connector is free, it works for any household, and each person approves it for themselves. The household's own Firestore rules decide everything it can do, because it acts as the signed-in person. It never uses a service account.
MCP endpoint:
https://huishouden-connector.<account>.workers.dev/mcp(Streamable HTTP). Staging runs athuishouden-connector-staging.<account>.workers.dev, against thehuishouden-stagingproject.How to add it: the portal's Use with your AI assistant page (
/assistant, in every app's account menu) shows the exact address and the steps for Claude, ChatGPT and Gemini CLI, in English, Spanish and Dutch.
Tools
Every tool takes an optional household (the default is the one the apps open), lang (en, es
or nl; the default is the person's Huishouden language) and time_zone (the default is the one in
their profile). Answers are short Markdown in that language, with deep links into the apps. They
also come back as structured data. Writing tools take an optional idempotency_key: a retry with the
same key writes nothing new.
Tool | Does |
| Who is signed in, their households and their role in each, language and time zone |
| Today's agenda (overdue, today, next 48 hours) and open to-dos, as the portal shows them |
| The household calendar between two days, by day |
| Open to-dos from every app, with ids, filters and sorts, and whether this person may act on each |
| Run a to-do's Done or Cancel action exactly as the portal does (kit |
| Shopping lists, in the Groceries app's shapes (including staples) |
| A task, with an optional due date or time |
| Open bills, amounts, due dates, autopay and pay links (admins and members only) |
| The feeding board, care reminders and medicine courses; logging as the Pet app does |
| Upkeep jobs due and regular events; a new regular event (EventRule) or a booked visit |
| Pet, baby, car, or health (on the calendars of the person's carers and the admins only) |
| The household's shared contacts |
| The people this person looks after in Health |
| Strength, dose, schedule, prescriber, pharmacy, supply and days left, refills, notes, allergies |
| Given, missed and skipped doses, and adherence per medicine and overall |
| Today's doses, as-needed availability, refills running low |
| Given or skipped, with Health's double-dose and as-needed guards (it asks before overriding) |
| Add or change a medicine, stop or restart it, count the supply, mark a refill ordered |
| Health's printable medicine list, as Markdown |
There are no delete tools. Every Health answer ends with a one-line note: these are the household's own records, not medical advice.
Related MCP server: stafett
How sign-in works
The connector speaks OAuth 2.1 as MCP clients expect: discovery (RFC 9728 and RFC 8414), dynamic
client registration and Client ID Metadata Documents, PKCE (S256), and refresh tokens. All of this
comes from @cloudflare/workers-oauth-provider.
The identity step happens on Huishouden's own site, through the same Google sign-in as every app, so
there is no OAuth client to configure and no redirect URI to register.
GET /authorizeshows the connector's consent page: which app is asking, where access goes, and a warning for local apps. The page can't be framed and is bound to the browser.Continue sends the browser to the portal's
/connectpage, with a state bound to that browser.The portal signs the person in with Google (Firebase Auth) and asks them to confirm. On Allow it posts their Firebase refresh token to
/connect/hand-off, from the portal's origin only. The connector checks the token with Firebase Auth and keeps it for two minutes under a one-time code, encrypted with a key only that code derives.The portal sends the browser to
/connect/callback. The connector takes the hand-off back once, for that state, and completes the grant. The refresh token goes into the grant's props, which workers-oauth-provider stores in Workers KV encrypted with a key that only the client's tokens unwrap.On each tool call, the refresh token buys a fresh ID token (cached per isolate). Firestore REST is called with that ID token, so the rules apply exactly as in the apps. Each OAuth refresh also checks the Firebase sign-in still stands. When it doesn't, the grant ends and the assistant asks the person to connect again.
The browser and server halves are reusable kit modules, documented in pwa-kit docs/server.md:
Module | Provides |
| The portal's /connect flow |
| Refresh token to ID token; verifying a portal ID token |
| Firestore as the person: get, query, atomic commit |
| The person's days on a UTC server |
| The data contracts and app logic |
The calendar feed reuses the same modules.
Safety
Rules: every read and write is the person's own and checked by huishouden/rules.
Helpers and kids get only what isn't private, and never money.
Health is readable only by admins, the person's carers and the person themself. Others get nothing, as if the person didn't exist.
Records the connector creates carry
via: 'assistant', and the rules accept only that value.
Rate limits: each connected assistant may make 60 tool calls and 20 writes a minute (Workers Rate Limiting bindings).
Audit: each tool call is written, as the person, to
households/{id}/connections/{connection}/audit: the tool, read or write, whether it worked, the app and record. Only that person can read it. The portal shows it under each connected assistant, next to Disconnect.Revoke: the portal calls
POST /connections/revokewith the person's Firebase ID token. The connector checks the token with Firebase Auth, revokes the grant and its tokens, and removes the connection record.GET /connectionslists the person's grants.Logs: each tool call logs the tool name, read or write, the outcome, the duration and an error code. Logs never contain names, emails, record ids, tokens or medicine names. The connector sends nothing to New Relic.
Development
bun install
bun run lint # tsc, src and tests
bun run test # unit, Firebase Auth, and every tool against the Firestore and Auth emulators (JDK 21)
bun run e2e # wrangler dev against the emulators + the MCP SDK client: the whole OAuth sign-in, then tools
bun run dev # wrangler dev (set FIREBASE_API_KEY in .dev.vars)The tests use the household's real rules from huishouden/rules main. Set RULES_REF to use
another ref, or RULES_FILE to use a local checkout. The household in test/fixtures/household.ts
is invented: every role, a non-member, and Health with a carer and a non-carer.
Deploy
bunx wrangler secret put FIREBASE_API_KEY # the project's public web API key, once
bunx wrangler secret put FIREBASE_API_KEY --env staging
bun run deploy && bun run deploy:stagingThe connector needs no other secrets. Workers KV (grants), the rate limits and Workers itself all fit the Cloudflare free plan.
Deploy from GitHub Actions (optional)
CI tests every push. It deploys staging and then production on main once the repository has these
secrets; until then the deploy job is skipped with a notice.
Cloudflare dashboard > My Profile > API Tokens > Create Token > "Edit Cloudflare Workers" template, limited to this account.
Add the token as
CLOUDFLARE_API_TOKENand the account id asCLOUDFLARE_ACCOUNT_ID:gh secret set CLOUDFLARE_API_TOKEN -R huishouden/connectorandgh secret set CLOUDFLARE_ACCOUNT_ID -R huishouden/connector.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server that gives AI agents full control over grocery lists, todos, and packing lists. Your AI creates lists, adds items, checks them off, and shares with family/friends.4MIT
- FlicenseNot gradedqualityCmaintenanceA remote MCP server that gives AI assistants a shared memory, enabling structured handoffs, journaling, and notes for seamless continuation across sessions.-
- FlicenseNot gradedqualityCmaintenanceAn MCP server for managing a home medicine box, enabling AI assistants to query medicines, recognize images, compute expiry dates, and get medication advice via stdio JSON-RPC.-
- FlicenseNot gradedqualityBmaintenanceEnables MCP-compatible clients like ChatGPT and Claude to manage a household's shared food inventory, meal plans, recipes, and preferences through natural language, with atomic updates and audit logging.-