heorth-mcp
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., "@heorth-mcpAdd 'buy anniversary gift' to my tasks"
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.
heorth-mcp
The Wyrhta Labs household's single MCP server, running as its own container.
It owns no data and no domain logic. Every tool call is translated into calls against an upstream service's public REST API — so an MCP tool can only ever do what an authenticated household member could already do over HTTP.
MCP client ──Streamable HTTP──▶ heorth-mcp ──▶ Heorth REST (43 tools)
└─▶ KithLedger REST (13 tools)Status
All 56 tools ported. The 43 Heorth tools (household.*, calendar.*,
meals.*, library.*, ethel.*, tasks.*, feoh.*) landed in task A5;
the 13 kith.* tools in task B11. tools/list serves whatever the configured
upstreams provide — both, one, or (with neither configured) nothing at all. The
MCP code still lives embedded in Heorth and KithLedger and is deleted there only
once the equivalent tool here is verified against the deployed container.
Related MCP server: Enterprise MCP Server
Configuration
Variable | Meaning |
| Heorth's base URL. Unset -> the 43 Heorth tools are not registered. |
| KithLedger's base URL. Unset -> the 13 |
| The satellite audience for exchanged tokens (default |
| Default |
| Per upstream call, default |
heorth-mcp holds no credential of its own — for either upstream. Heorth
calls carry the caller's Bearer he_... verbatim. KithLedger calls carry a
short-lived member token that heorth-mcp exchanges at Heorth
(POST /api/v1/auth/satellite-token, ADR 0009) using that same caller
credential, cached in memory per caller for just under its 5-minute life. That
is why kith.* needs both upstreams: Heorth is the identity authority, so with
it unreachable the kith.* tools fail (IDENTITY_UNAVAILABLE) even when
KithLedger is healthy.
KITH_API_KEY is gone. KithLedger enforces per-member access control
(ADR 0004) and none of its three kl_ credential kinds is the calling member: a
member key reads as the issuing account's own scope, a household key sees
only the household slice, an ops key has no data access at all.
docs/spec/tool-surface.md— the 56-tool contract and its REST mappingdocs/spec/migration.md— what moves out of the upstream repos, in what order, and what must be true before each deletionAGENTS.md— architecture, auth model, and conventions
Created by ADR 0008 — MCP as a standalone container over REST in the meta
repo Wyrhta-Labs/wyrhta-labs.
Container image
Published to the GitHub Container Registry as
ghcr.io/wyrhta-labs/heorth-mcp by
.github/workflows/build-image.yml. The
workflow typechecks and runs the full test suite first — a red suite blocks the
publish — then builds this repo's Dockerfile for linux/amd64.
Only two things publish: a push to main and a v* git tag. Nothing else
does, so the registry stays free of branch junk.
Tag | Produced by | Pinnable? |
| every push to | yes — immutable, one build per commit |
| a |
|
| every push to | no — moving pointer |
| a | no — moving pointer |
Pinning it in production. The meta repo's deploy/compose.prod.yml
requires an explicit tag in deploy/.env:
HEORTH_MCP_IMAGE_TAG=main-a1b2c3d # a main build, by short commit sha
HEORTH_MCP_IMAGE_TAG=0.2.0 # a release, once a v0.2.0 tag existsNever pin latest or main — both move under the running deployment and
defeat the point of pinning. Use the exact main-<sha> shown in the workflow
run (or docker images), or the semver of a release.
The image is private, like the repo. A host that pulls it needs a GHCR login
with read:packages for the Wyrhta-Labs org.
Related repos
Repo | Role |
Concept, ADRs, deploy stack | |
Household hub — upstream | |
Relationship manager — upstream | |
Shared lib, pinned by git tag |
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Related MCP Servers
- AlicenseAqualityCmaintenanceA single MCP server that fronts multiple REST APIs, each configured via environment variables, allowing Claude to orchestrate across several SaaS backends with namespaced tools.21MIT
- FlicenseNot gradedqualityCmaintenanceA single MCP server that exposes safe, permission-checked tools for AI assistants to reach file systems, databases, APIs, Git, cloud services, and business applications.-
- FlicenseBqualityBmaintenanceUnified MCP server exposing 12 DevOps tools across GitHub, PostgreSQL, Slack, and Google Calendar for AI agents, with rate limiting, input validation, and per-service scoped tokens.30-
- FlicenseNot gradedqualityCmaintenanceA universal MCP server for registering internal, external, and OpenAPI-based APIs as MCP tools. It exposes them to MCP clients via Streamable HTTP and provides admin portal, RBAC/session auth, credential injection, and audit logging.-