Connect Shafeh to Claude (claude.ai, desktop and mobile)
- In Claude, open Settings → Connectors and choose “Add custom connector”.
- Name it Shafeh and paste the server URL: https://shafeh.org/mcp
- Daily learning, texts and the calendar work straight away. To use your learning history, family or memorial claims, choose Connect — you'll sign in to Shafeh with an email code and approve access.
- Optional: upload the Shafeh skills (below) under Settings → Capabilities → Skills.
What your assistant can do
Contract version 2026-10-25.1. Tools marked sign-in need a connected account.
| Tool | What it does |
|---|---|
| today | Today's Jewish date, parsha, holidays and the day's learning (Chumash with Rashi, Tehillim, Tanya, Rambam, Hayom Yom), with full Hebrew text, plus zmanim for a place. Examples: "what's today?", "today's Tanya", "tonight's Rambam 1 perek", "zmanim in Los Angeles tomorrow". |
| texts | Open any text in Shafeh's library by reference: Tanach (with Rashi), Tehillim, Mishnah, Talmud Bavli, Shulchan Aruch / Mishnah Berurah / Kitzur, the siddur, and haftaros. Examples: "Berachos 2a", "Mishnah Avos 1", "Tehillim 23", "OC 1:1", "Mishnah Berurah 25", "mincha". |
| calendar | Convert dates between the Hebrew and civil calendars, see a month, find multi-day periods (the Three Weeks, the Omer…), and work out a Hebrew birthday or personal Tehillim kapitel from a birth date. Examples: "15 Shevat 5787", "Hebrew date of 2019-03-10", "kapitel for someone born 2010-05-02 after sunset". |
| learning | Your learning history, bookmarks (continue where you left off) and preferences. Requires sign-in. Sign-in: me, preferences, update_preferences, history, mark_learned, unmark_learned, bookmarks, set_bookmark, continue |
| family | Your family's Hebrew names and birthdays: everyone's Tehillim kapitel today, upcoming Hebrew birthdays, and names for tefillah. Requires sign-in. Sign-in: list, kapitels_today, upcoming_birthdays, tefillah_names, add_or_update_member, remove_member |
| memorials | Mishnayos memorials: see progress, claim perakim and check off mishnayos. Viewing is open; claiming requires sign-in. Sign-in: mine, claim_perek, claim_many, check_off_mishnah, release_claim, create_memorial |
Skills
Short guides that teach an assistant to use Shafeh well (quote Hebrew verbatim, keep attributions, ask instead of guessing). Upload a zip in Claude, install by URL elsewhere.
Accounts and privacy
- Nothing is needed for daily learning, the library or the calendar.
- Connecting asks you to sign in with an email code (a free account is created if you don't have one) and shows exactly what the assistant may do. Family names and birthdays are a separate permission.
- Anything others will see (claiming several perakim, starting a memorial) or that deletes something is shown to you as a preview first; the assistant can't approve it for you.
- See and disconnect every assistant, and manage personal tokens, at Settings → Connections.
For developers
- MCP:
https://shafeh.org/mcp(stateless Streamable HTTP). Sign-in-required alias:https://shafeh.org/mcp/account. - OAuth metadata:
https://shafeh.org/.well-known/oauth-protected-resource/mcp,https://shafeh.org/.well-known/oauth-authorization-server. PKCE S256; dynamic registration or client metadata documents; resource-bound tokens; 1-hour access tokens, rotating refresh tokens. - REST twin:
https://shafeh.org/api/v1/agent/openapi.json· catalog: https://shafeh.org/api/v1/agent/catalog - Headers:
Authorization: Bearer <token>,X-Agent-Name,Idempotency-Keyfor writes. - Diagnostic: shafeh-mcp-check.py (standard library, read-only;
--accountalso checks the connected account). - Read-only MCP:
https://shafeh.org/mcp/read-only. Thelearning_read,family_readandmemorials_readtools cannot write; their_writecounterparts are separate tools at/mcp.
Worked OAuth example
curl -X POST https://shafeh.org/oauth/register -H 'Content-Type: application/json' \
-d '{"client_name":"My agent","redirect_uris":["http://127.0.0.1:8765/callback"],"scope":"account:read learning:read learning:write"}'
# open in a browser (start the loopback listener first):
https://shafeh.org/oauth/authorize?client_id=<client_id>&redirect_uri=http%3A%2F%2F127.0.0.1%3A8765%2Fcallback
&response_type=code&state=<random>&code_challenge=<base64url(sha256(verifier))>&code_challenge_method=S256
&resource=https%3A%2F%2Fshafeh.org%2Fmcp
# check state, then:
curl -X POST https://shafeh.org/oauth/token -d grant_type=authorization_code -d client_id=<client_id> \
-d code=<code> -d redirect_uri=http://127.0.0.1:8765/callback -d code_verifier=<verifier> -d resource=https://shafeh.org/mcp
Troubleshooting
- Tool names (
today,texts…) are called withtools/call— they aren't JSON-RPC methods. - Read
structuredContentfirst. An empty list is an answer; errors setisErrorand carry anerrorcode. 401 invalid_token: the access token expired or was revoked — refresh it (and store the new refresh token) or reconnect.403 insufficient_scope: reconnect and approve the scope named inWWW-Authenticate.- Can't call tools at all? Every result has a
source_urlon shafeh.org to open instead.