
Relay
io.github.vishnumuthyaluPublished by GitHub account vishnumuthyaluv1.0.1Updated Oct 24, 2026
Turn GitHub pushes into plain-English client update emails. Map repos to clients and review digests.
Overview
Relay turns GitHub pushes into plain-English client update emails, letting an assistant map repos to clients and review digests via a hosted MCP endpoint.
- What you can do
- Map repositories to clients and manage those mappings, including creating, updating and removing them
- Review digest history and this month's usage against the plan cap
- Send a sample digest to a confirmed client
- Work with per-installation operations shared with the JSON API, after signing in with GitHub
- When to use it
- For freelancers and agencies who want clients to receive short, jargon-free summaries of pushes to their repositories, and who prefer to set up and check those client mappings by chatting with an assistant instead of using the dashboard.
- Requirements
- Remote MCP endpoint at relay-vishnu.fly.dev/mcp, with OAuth 2.1 sign-in through GitHub. The Relay GitHub App must be installed on the repositories, and each client must confirm by email before digests are sent. Self-hosting needs Node.js 22.12+, Docker with Postgres, a GitHub App, an Anthropic API key and a Resend API key.
Installation
In SourceWeft
- Open Relay 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.vishnumuthyalu%2Frelay/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": {
"relay": {
"type": "http",
"url": "https://relay-vishnu.fly.dev/mcp"
}
}
}README
Relay
Plain-English client updates from every GitHub push
Live at relay-vishnu.fly.dev. Install the GitHub App, then add https://relay-vishnu.fly.dev/mcp to your MCP client, find Relay in the MCP Registry, or install the extension from the VS Code Marketplace or Open VSX.
Relay is a GitHub App for freelancers and agencies. Install it on your repositories, map each one to a client, and every push to the main branch becomes a short, jargon-free email summary written by Claude. Clients confirm by email before anything is sent, and every digest has a one-click unsubscribe.
How it works
- GitHub App: one install connects any number of repositories, and no personal access tokens are needed (ADR 002).
- Multi-tenant: every row belongs to an installation, users are authorized by the installations GitHub says they can access, and uninstalling deletes that tenant's data.
- Postgres + pg-boss: the webhook replies 202 immediately, and a separate worker sends digests with retries and backoff (ADR 003).
- Consent built in: double opt-in confirmation, signed one-click unsubscribe (RFC 8058), and confirm/unsubscribe pages that only change state on POST.
- Cost controls: per-installation monthly cap on Claude-written digests (plain digests past it), token usage tracking, and a
CLAUDE_ENABLEDkill switch. - Spec-first: OpenAPI 3.1 and JSON Schema contracts enforced at runtime and in CI.
- Remote MCP server with OAuth 2.1: add one URL to Claude Code, Claude Desktop, VS Code or Cursor, sign in with GitHub, and manage Relay by chatting (docs/mcp.md, ADR 004, ADR 005).
- Dashboard: a small server-rendered UI at
/dashboardfor people who don't use MCP. - Richer summaries (opt-in): merged PR descriptions from GitHub, and issue details from the tenant's ticket tracker through Anthropic's MCP connector, with read-only tool allowlists and fallbacks (docs/summaries.md).
Running locally
Prerequisites: Node.js 22.12+, Docker (for Postgres), a GitHub App, an Anthropic API key and a Resend API key.
GitHub must reach your machine for webhooks and sign-in, so run a tunnel (ngrok http 3000) and use its URL as PUBLIC_URL and in the app settings.
Then:
- Open
PUBLIC_URL/installand install the app on a repository. - Open
PUBLIC_URL/dashboardand sign in with GitHub. - Map the repository to a client in the dashboard, with the API (below) or with the MCP tools. The client receives a confirmation email.
- After the client confirms, push to the default branch, or run
node simulate-webhook.js.
To run everything in containers instead: docker compose up --build.
Deploying
One image, two processes (web, worker), one Postgres. The hosted instance runs on Fly.io (one web and one worker machine) with Supabase Postgres; migrations run as Fly's release command before each deploy. See docs/deploy.md. Tags drive releases: v* deploys the backend and updates the MCP Registry entry, and ext-v* publishes the VS Code extension.
Configuration
All settings are environment variables; .env.example lists and explains each one. The web and worker processes refuse to start if a required value is missing.
API
The JSON API is described in spec/openapi.yaml and validated at runtime. It uses the session cookie from Sign in with GitHub.
Other routes: POST /webhook/github (GitHub App deliveries), /mcp (remote MCP), /oauth/* and /.well-known/* (OAuth for MCP clients), /dashboard, /auth/login, /auth/callback, POST /auth/logout, /install, /confirm, /unsubscribe, /privacy, /health, /ready.
MCP server
Remote: add https://relay-vishnu.fly.dev/mcp to your MCP client (or https://<host>/mcp for your own deployment). For example:
Local, against your own database:
Client setup is in docs/mcp.md, and the tool contract is in spec/mcp-tools.md.
Testing
Tests run against a real Postgres: each test file gets its own schema, so suites run in parallel. docker compose up -d db creates the relay_test database.
CI runs the same steps on Node 22 and 24 with a Postgres service container, and fails if coverage drops (npm run test:coverage).
Project structure
Security
- Webhooks are verified with HMAC-SHA256 (constant-time) before anything else reads the body.
- Delivery IDs are claimed atomically, so duplicates and redeliveries never send twice.
- Sessions are signed
httpOnlycookies withSameSite=Lax. The JSON API only accepts JSON bodies, which blocks cross-site form posts. - Tenant data is always queried by installation, and other tenants' installations return 404.
- Email links are HMAC-signed and bound to the current address. Changing a client's email invalidates old links.
- Everything rendered into email or pages is HTML-escaped. Commit text is passed to Claude as untrusted data, and replies are schema-validated.
- No GitHub tokens are stored.
- MCP access tokens are bound to
PUBLIC_URL/mcp(RFC 8707). PKCE is mandatory, authorization codes are single-use, refresh tokens rotate, and both are stored only as hashes. The/mcpendpoint checks the Host header against DNS rebinding.
License
MIT
Source: README.md at commit c454b50
Tools
0Version history
1- v1.0.1LatestOct 23, 2026
Score
85% 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