프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

Relay

제작자: vishnumuthyalu버전 1.0.1i★ –i클라우드에서 실행
레지스트리 이름io.github.vishnumuthyalu/relay

설치

개요

제작자가 쓴 설명(영어 원문)

Turn GitHub pushes into plain-English client update emails. Map repos to clients and review digests.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 클라우드에서 실행
  • 전송 방식: Streamable HTTP
  • 카테고리: 개발자 도구

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 제작자의 서버에서 실행돼요. 내가 요청한 내용은 제작자의 서버를 거쳐요.
  • 레지스트리에 입력해야 할 키가 나와 있지 않아요.

필요한 것

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:

  1. Settings → Connectors 열기
  2. Add custom connector 누르기
  3. 아래 주소를 붙여 넣고 Add 누르기
  4. 로그인하라고 하면 제작자의 서비스에 로그인하기
SettingsConnectors1+ Add2https://…3
https://relay-vishnu.fly.dev/mcp

터미널에서 이 명령어를 실행하세요

claude mcp add --transport http relay https://relay-vishnu.fly.dev/mcp

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "relay": {
      "url": "https://relay-vishnu.fly.dev/mcp"
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "relay": {
      "type": "http",
      "url": "https://relay-vishnu.fly.dev/mcp"
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:

  1. 웹에서 ChatGPT 열기 → Settings → Connectors (Apps)
  2. Create 또는 Add 누르기(일부 요금제는 먼저 Advanced에서 Developer mode를 켜야 해요)
  3. 아래 주소를 붙여 넣고 이름을 정한 뒤 저장하기
  4. 로그인하라고 하면 제작자의 서비스에 로그인하기
SettingsConnectors1+ Create2https://…3
https://relay-vishnu.fly.dev/mcp

메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

아직 이 서버의 도구 목록을 읽지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 vishnumuthyalu 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    엔드포인트 응답

    아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요

  • … 아직 점검 안 함

    OAuth로 로그인

    아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요

개발자 도구 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 1396개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 1396개 중 75%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 1396개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

Relay, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.0.1)은 15일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: GitHub, Desktop Commander, Cloudflare MCP

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

GitHub

제작자: github

Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

컴퓨터 또는 클라우드★ 34,245MIT4일 전 업데이트
설치

Desktop Commander

제작자: wonderwhy-er

MCP server for terminal commands, file operations, and process management

내 컴퓨터에서 실행★ 10,225MIT16일 전 업데이트
설치

Cloudflare MCP

제작자: cloudflare

Cloudflare MCP servers

클라우드에서 실행★ 4,446Apache-2.014개월 전 업데이트
설치

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

Relay

Plain-English client updates from every GitHub push

Live at [relay-vishnu.fly.dev](https://relay-vishnu.fly.dev/dashboard). 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

sequenceDiagram

participant Dev participant GitHub participant Web as Relay web participant Queue as Postgres (pg-boss) participant Worker as Relay worker participant Claude participant Resend participant Client

Dev->>GitHub: git push GitHub->>Web: POST /webhook/github (HMAC-signed, installation id) Web->>Web: verify signature, claim X-GitHub-Delivery alt duplicate, filtered, or client not confirmed Web-->>GitHub: 200 duplicate / filtered else new push for an active mapping Web->>Queue: enqueue process-push Web-->>GitHub: 202 accepted Queue->>Worker: job Worker->>Claude: summarize commits (structured output), unless over the monthly cap Claude-->>Worker: validated summary Worker->>Resend: digest email + List-Unsubscribe Resend-->>Client: digest end

  • 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_ENABLED kill 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 /dashboard for 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.

git clone https://github.com/vishnumuthyalu/relay-extension.git

cd relay-extension npm install cp .env.example .env # fill in the values; see docs/github-app.md docker compose up -d db # Postgres on localhost:5432 (dev + test databases) npm run migrate npm run dev # web process on :3000 npm run dev:worker # worker process, in a second terminal

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:

  1. Open PUBLIC_URL/install and install the app on a repository.
  2. Open PUBLIC_URL/dashboard and sign in with GitHub.
  3. Map the repository to a client in the dashboard, with the API (below) or with the MCP tools. The client receives a confirmation email.
  4. 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.

VariableRequiredPurpose
DATABASE_URLYesPostgres connection string
PUBLIC_URLYesPublic base URL (webhooks, sign-in callback, email links)
SESSION_SECRETYes32+ random characters; signs sessions and email links
GITHUB_APP_SLUG, GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, GITHUB_WEBHOOK_SECRETYesFrom the GitHub App
ANTHROPIC_API_KEYUnless CLAUDE_ENABLED=falseClaude API key
RESEND_API_KEY, FROM_EMAILYesEmail delivery (verify your sending domain in Resend)
ANTHROPIC_MODELNoDefault claude-haiku-4-5
DIGEST_MONTHLY_CAPNoClaude-written digests per installation per month, default 100
CLAUDE_ENABLEDNofalse sends plain digests for everyone
GITHUB_APP_ID, GITHUB_APP_PRIVATE_KEYNoPull request context in summaries
INTEGRATIONS_KEYNoEncrypts ticket-tracker tokens; enables tracker connections

API

The JSON API is described in spec/openapi.yaml and validated at runtime. It uses the session cookie from Sign in with GitHub.

MethodPathPurpose
GET/api/meYou and the installations you can manage
GET/api/installations/{id}/mappingsClient mappings with status (pending, active, unsubscribed)
PUT/api/installations/{id}/mappings/{owner}/{repo}Create or update a mapping; sends the confirmation email
DELETE/api/installations/{id}/mappings/{owner}/{repo}Stop digests for a repository
POST/api/installations/{id}/mappings/{owner}/{repo}/testSend a sample digest to a confirmed client
GET/api/installations/{id}/digestsDigest history
GET/api/installations/{id}/usageThis month's usage against the cap

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:// /mcp for your own deployment). For example:

claude mcp add --transport http relay https://relay-vishnu.fly.dev/mcp

Local, against your own database:

RELAY_INSTALLATION_ID=12345678 npm run mcp   # stdio server for one installation

npm run mcp:inspect # open it in the MCP Inspector

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.

npm test

npm run lint npx @stoplight/spectral-cli lint spec/openapi.yaml --ruleset .spectral.yaml

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

relay-extension/

├── server.js # Web process: webhooks, sign-in, API, email link pages ├── worker.js # Worker process: sends digests from the queue ├── lib/ │ ├── config.js # Env validation │ ├── db/ # Postgres pool, migrations runner, tenant-scoped queries │ ├── jobs/process-push.js # One delivery: caps, Claude or fallback, email, records │ ├── queue.js # pg-boss setup │ ├── service.js # Per-installation operations shared by API and MCP │ ├── pipeline.js # Summarize + email │ ├── claude.js # Claude structured outputs + schema validation │ ├── email.js # Email HTML, unsubscribe headers, Resend │ ├── links.js # Signed confirm/unsubscribe links │ ├── github.js # GitHub OAuth (Sign in with GitHub) │ ├── oauth/ # MCP authorization server: clients, tokens, JWT │ ├── context/ # Optional PR and ticket context for summaries │ ├── github-app.js # GitHub App JWT and installation tokens │ ├── crypto-box.js # AES-256-GCM for stored tracker tokens │ ├── html.js, csrf.js # Server-rendered pages and form protection │ ├── security.js # Webhook HMAC verification │ └── retry.js # Retry with backoff for Claude and Resend ├── routes/ # webhook, mcp, oauth, auth, dashboard, api, email links ├── migrations/ # Numbered SQL migrations ├── mcp/ # MCP server, tools, resources, stdio entrypoint ├── spec/ # OpenAPI, JSON Schemas, webhook and MCP contracts ├── tests/ # Jest suites + helpers (per-file Postgres schema) ├── extension/ # VS Code extension: registers the remote MCP server ├── server.json # MCP Registry entry ├── fly.toml # Fly.io deployment (web + worker, migrations on release) ├── docs/ # GitHub App, MCP, summaries, deployment, ADRs, sequence diagram ├── docker-compose.yml └── Dockerfile

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 httpOnly cookies with SameSite=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 /mcp endpoint checks the Host header against DNS rebinding.

License

MIT

PopNx에게 묻기