
Estevao Mcp
io.github.dodopok由 GitHub 账号 dodopok 发布v0.3.0更新于 Oct 25, 2026
Anglican liturgical calendar, lectionary and Daily Office (Book of Common Prayer) via Estêvão API
概览
面向圣公会礼仪数据的 MCP 服务器:助手可查询礼仪日历、经课读经以及完整编排的日课(公祷书)。
- 可以做什么
- 查询某日的礼仪日、节期、颜色、庆节、祝文与读经,或获取月度日历网格和全年节期与移动节庆概览。获取经课读经及主日(A/B/C)与平日(1/2)循环,并以 markdown 或结构化 JSON 编排完整的日课(晨祷、午祷、晚祷、寝前祷)。搜索、浏览并查看庆节、圣徒与圣日的详情,包括迁移规则与计算方式。列出可用的公祷书版本与圣经译本,查看各版本的偏好选项,并对 2 至 4 个版本进行并列比较。解释某日礼仪优先级、迁移与读经选择的依据。
- 适用场景
- 适合让助手回答圣公会礼仪相关问题,例如下一个主日的读经、编排当晚的日课,或比较不同公祷书版本对同一天的安排。
- 运行要求
- 可使用托管远程端点并通过浏览器 OAuth 登录(Google 或电子邮箱账户),或使用 npx 运行本地 npm 包,此时需在 ESTEVAO_API_KEY 中提供 Estêvão API 密钥。可选设置包括 ESTEVAO_BASE_URL、ESTEVAO_DEFAULT_PRAYER_BOOK、ESTEVAO_TIMEZONE 和 ESTEVAO_LANGUAGE。需要能访问 Estêvão API 的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 Estevao Mcp,将其添加到工作区。
- 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
- 为需要使用其工具的对话启用该服务。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
交给智能体安装
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/io.github.dodopok%2Festevao-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。其他 MCP 客户端
把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。
{
"mcpServers": {
"estevao": {
"type": "http",
"url": "https://mcp.caminhoanglicano.com.br/mcp"
}
}
}README
estevao-mcp
[npm] [MCP Registry] [License: MIT]
MCP (Model Context Protocol) server for the Estêvão API — the liturgical engine behind the Ordo app. Gives Claude and any MCP client accurate Anglican liturgical data: calendar (with real precedence rules), lectionary readings, and the fully assembled Daily Office across multiple editions of the Book of Common Prayer / Livro de Oração Comum.
Quick start
Hosted (no key to manage) — sign in with your Google/e-mail account when the browser opens:
Other clients: see Connecting any MCP client.
Local (stdio) — you need an Estêvão API key (estevao_…):
Or in .mcp.json / Claude Desktop config:
Then ask things like "what are the readings for next Sunday?", "assemble tonight's Compline" or "compare Christmas in the 1662 and 2019 prayer books".
Tools
Dates accept YYYY-MM-DD, today or next-sunday. Every tool takes an optional prayer_book (default loc_2015); all tools are read-only. Prayer book codes are validated by the API rather than pinned in this server, so editions added upstream work without a release here — list_prayer_books always shows the current catalogue.
Resources & prompts
- Resources:
ordo://prayer-books,ordo://bible-versions,ordo://today, plus templatesordo://day/{date},ordo://explain/{date}(the decision trail),ordo://office/{date}/{office_type}(markdown) andordo://calendar/{year}/key-dates. - Prompts (strictly factual):
build_liturgy_sheet(print-ready boletim),explain_feast(history, precedence, color),explain_why(why this reading/saint/colour, answered from the engine's decision trail rather than inferred),compare_traditions(side-by-side across editions).
Editorial note: this server intentionally exposes only factual liturgical data and faithful document assembly. It does not (and will not) ship prompts that generate sermons, homilies or devotional reflections.
Environment variables
Per-book preferences
The date-scoped tools take a preferences object forwarded to the API, which unlocks the
per-edition options the Ordo app exposes — the Coverdale psalter on the English books
({ "psalm_translation": "coverdale" }), monthly vs appointed psalm cycles, canticle and
opening-sentence choices, family-rite variants. The accepted keys differ per book, so call
get_prayer_book_preferences first rather than guessing.
Languages
Liturgical content always stays in the prayer book's own language (a 1662 office is English, LOC 2015 is Portuguese). Labels generated by the server — office titles, Season/Tempo/Tiempo, comparison headings — automatically follow the book's language, and can be overridden per call (language param) or globally (ESTEVAO_LANGUAGE).
Remote server (Streamable HTTP + OAuth)
The same server runs as a remote MCP endpoint (POST /mcp, stateless Streamable HTTP).
Deployed with OAuth enabled, users connect with a browser sign-in instead of pasting a key:
The client discovers the authorization server, registers itself, opens the consent screen, and the user signs in with the same Google/e-mail account they use in the developer portal. The server then provisions an Estêvão API key for that account, encrypts it at rest and uses it for every upstream call — the user never sees or handles a key, and the client's token is never forwarded upstream.
Auth modes
The mode is chosen by environment, and resolved per request in this order:
- Single-key (personal deployment):
ESTEVAO_API_KEYset on the server. Optionally setESTEVAO_MCP_TOKENto requireAuthorization: Bearer <token>from clients. - API key (unchanged, for existing integrations): the caller sends its own key in
X-API-Key(orAuthorization: Bearer estevao_…). Disable withESTEVAO_MCP_ALLOW_API_KEY_HEADER=false. - OAuth 2.1 (recommended for public deployments): the caller sends an access token issued by this server. Enabled when the OAuth variables below are all set.
OAuth configuration
Setting only some of these is a configuration error and the server refuses to start, rather than silently falling back to key-only mode. The Postgres schema is created on boot.
Same-origin sign-in (required on mobile and Safari)
By default the Firebase Web SDK runs its sign-in helper on <project>.firebaseapp.com, a
different origin from this server. Safari's ITP (16.1+), Firefox and the in-app browsers used
by mobile assistants block the cross-origin round trip that flow needs: the user picks a Google
account and then nothing happens. So this server reverse-proxies /__/auth/* to the Firebase
helper and points the consent screen at its own origin, which is the fix
Firebase documents for it.
Sign-in uses a full-page redirect rather than a popup, for the same reason.
Two one-time console steps make this work:
- Firebase Console → Authentication → Settings → Authorized domains: add the MCP host.
- Google Cloud Console → APIs & Services → Credentials → the Web OAuth 2.0 client used by
Firebase: add
https://<mcp host>/__/auth/handlerto Authorized redirect URIs.
Set MCP_FIREBASE_AUTH_PROXY=false to go back to the stock cross-origin behaviour.
Diagnosing a failed sign-in
Sign-in runs in the user's browser, so a failure there reaches no log by itself. The consent
screen posts beacons to /oauth/diagnostics, which the server writes to stderr:
Only error codes and flags are reported — never tokens or credentials.
Endpoints: /.well-known/oauth-protected-resource (also under /mcp),
/.well-known/oauth-authorization-server, /authorize, /token, /register, /revoke,
and the consent screen at /oauth/consent. GET /healthz reports the active mode.
Security properties: PKCE S256 is mandatory, authorization codes are single-use and expire in
60s, refresh tokens rotate on use, access tokens are opaque and stored only as digests, tokens
are bound to this server's resource identifier (RFC 8707) and rejected otherwise, and the
Estêvão API key is AES-256-GCM encrypted at rest.
Connecting any MCP client
The endpoint is standard Streamable HTTP with OAuth 2.1 discovery, so any spec-compliant client can connect. Concretely:
Interoperability details that make this work across clients:
- Discovery everywhere clients look. Protected resource metadata is served both at the root
and under
/mcp; authorization server metadata is served at/.well-known/oauth-authorization-server, its/mcppath-inserted variant, and both OpenID Connect discovery spellings. - Registration. Dynamic Client Registration (RFC 7591) and Client ID Metadata Documents
are both accepted; clients that pre-register a
client_idwork too. - Client authentication.
none(public clients, the common case) and bothclient_secret_postandclient_secret_basicfor confidential ones. - Scopes. There is one read-only scope,
liturgy:read. Clients that ask for unrelated scopes (openid profile,mcp, or nothing) still get a working connection. - CORS. Preflight is answered and
WWW-Authenticateis exposed, so browser-based clients can read the challenge and start the flow. - Probes. Unauthenticated
GET/DELETEon/mcpreturn the auth challenge rather than a bare 405, so clients that probe before authenticating still discover the flow.
Client config for a key-based deployment
Extra env: PORT (default 3333), ESTEVAO_MCP_ALLOWED_HOSTS (comma-separated; enables
DNS-rebinding protection).
Plugin para Codex, Claude e outros clientes
O repositório inclui um pacote universal em plugins/estevao, com manifests
para Codex e Claude Code e uma configuração MCP compartilhada. O pacote aponta para o servidor
hospedado, então a conexão usa OAuth e não exige copiar uma API key.
Para Claude Code:
Para Codex CLI:
Veja o guia visual de integração no portal do desenvolvedor. O mesmo endpoint funciona em qualquer cliente MCP compatível com Streamable HTTP e OAuth 2.1.
Development
Releasing
The npm version lifecycle hook (scripts/sync-version.ts) keeps server.json in sync and enforces the registry's 100-char description limit. The server's advertised MCP version comes from package.json at build time.
server.json lists both the hosted endpoint (remotes) and the npm package (packages), so
registry clients can pick either. Keep the hosted URL in step with the actual deployment.
Alternatively, once GitHub Actions is available with the NPM_TOKEN secret, git push --follow-tags alone triggers the release workflow (npm with provenance + MCP registry via GitHub OIDC).
License
MIT
来源:README.md,提交 589268c
工具
0版本历史
1- v0.3.0最新Sep 16, 2026
评分
已满足适用检查项的 85%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通必需25 分
- 已声明认证方式必需10 分
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分