Connect your Calaf recruiting book: validate and import seeds; people arrive staged for your review.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Calaf.
Organizationsdeduped account-wide by name, then joined to the workspace
Templatesdeduped within the workspace
Connect Claude, ChatGPT, or any MCP-capable assistant to Calaf β the MBA recruiting manager. Your assistant researches target firms at whatever depth you ask, writes and validates structured "seeds," and files them into your recruiting book. People it proposes always arrive staged for your review β nothing enters your network behind your back.
Two servers, one product.
ai.calaf/calafconnects to your account (OAuth).ai.calaf/seedsis the no-auth authoring loop β the format and the validator, usable by anyone, no Calaf account required.
| Server | Endpoint | Transport | Auth |
|---|---|---|---|
| Calaf | https://calaf.ai/api/mcp-account | Streamable HTTP | OAuth 2.1 (dynamic client registration) |
| Calaf Seed Tools | https://calaf.ai/api/mcp | Streamable HTTP | None |
Calaf, URL https://calaf.ai/api/mcp-account, leave Client ID/Secret emptyRequires a paid claude.ai plan (custom connectors are Pro and above).
Add a remote (Streamable HTTP) server at https://calaf.ai/api/mcp-account. The OAuth flow is standard: dynamic client registration + PKCE; your client discovers the authorization server via RFC 9728 protected-resource metadata.
The copy-paste loop works with every assistant: Calaf's Guide and Settings carry a one-paste prompt that teaches any AI the seed format; the assistant can self-check via the open validator API (below) and you import the file at Settings β Workspace β Seeds.
ai.calaf/calaf (account server)get_seed_format Β· read-onlyReturns the complete calaf_seed: 1 specification (markdown) β sections, ceilings, parser behavior, and the rules an assistant should follow when authoring a seed. Read it before authoring; then check drafts with validate_seed.
No parameters.
validate_seed Β· read-onlyRuns a draft seed document through the exact parser the Calaf app imports with and returns the verdict: per-section counts plus the precise issue list. Issue severity error means nothing would import; dropped means that row or field is discarded and the rest lands. Fix and re-validate until clean before delivering the file.
| Parameter | Type | Required | Description |
|---|---|---|---|
seed | string | object | yes | The complete seed JSON document β as text, or as the JSON object itself |
Returns (structured): valid, per-section counts (orgs, contacts, templates, prep, keyDates, orgKinds, ladderRungs), hasVocab, hasPlanner, and issues[] with path (e.g. orgs[3].name), message, severity.
list_workspaces Β· read-onlyLists the caller's Calaf workspaces β key, display name, position. Use the key as the workspace argument to import_seed.
No parameters. Returns: workspaces[] with key, name, emoji.
import_seed Β· write (non-destructive, idempotent)Imports a valid seed into one of the caller's workspaces β the same landing the app's import performs:
Re-importing the same file lands nothing twice; nothing is ever deleted or overwritten.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace | string | yes | Workspace key, from list_workspaces |
seed | string | object | yes | The complete seed JSON document |
parts | string[] | no | Which parts to process: orgs, templates, prep, contacts (= stage people). Defaults to everything the file carries |
Returns (structured): ok, landed (counts per part), failed[], and staged β people, orgs, buildId, skippedWithoutOrg, skippedInvalid.
export_seed Β· read-onlySerializes a workspace back into a calaf_seed document β the reverse loop: read the book, improve it, re-import (dedupe means a round trip never doubles anything). Privacy defaults: people, the user's personal notes, and content that arrived from other seeds stay out unless explicitly requested (include_people, include_notes, include_seeded); withheld and ceiling-truncated counts are always reported. No plan gate β data portability never sits behind a paywall.
get_profile_schema / get_firm_profile / submit_firm_profileFirm research at house depth. get_profile_schema returns the module shapes (overview, hq, leadership, comp, process, culture/recruiting notes) and the sourcing epistemics a submission must meet (MBA-grade comp sources, null beats a guess, verify leadership at the source). get_firm_profile reads current state with per-field provenance so chat edits merge against reality. submit_firm_profile writes sourced modules into the user's own overlay β rendered on their firm page badged as assistant research β under the merge contract: empty fields fill, fields the assistant wrote refresh, fields the user typed are never overwritten (reported as conflicts), and clear removes only assistant-owned fields. Sources are required; claims without them drop wholesale.
log_touchpoint Β· writeRecords an interaction (coffee chat, email, event, replyβ¦) with the app's own automations: contact status ladder (never downward), optional follow-up scheduling (which lands on the user's calendar), optional next-day thank-you task, and waking a Researching firm to Networking on real activity.
update_contact Β· writeCompletes a person already in the book. Identity fields (email/phone/LinkedIn/school/title/group) fill only where empty β user values win, differences reported. Relationship facets (warmth 1β5, stage, next follow-up, connection type) set explicitly, because "mark Jane dormant" is the ask itself. A firm link fills only when the person has none. append_note adds a dated, attributed note under β never over β the user's own. Creating people stays behind import_seed's staged review.
add_task Β· writeA due-dated task, optionally tied to a contact or firm. Tasks, follow-ups, and deadlines are what the user's calendar renders β this is the assistant's path onto it.
get_contacts / get_firms Β· read-onlyPaged summaries (contacts include which detail fields are still empty β worth researching) so the assistant navigates the real book, not its memory of it.
log_firm_work / get_firm_work / remove_firm_work Β· work logThe deals and work items coffee-chat talking points are made of. log_firm_work adds one to a firm's work log with sourcing facets (where it came from, how solid it is: Confirmed / Reported / Rumored); get_firm_work reads the log back, marking which rows are assistant-logged. remove_firm_work deletes only items the assistant itself wrote β entries the user logged by hand are refused, the same class of guarantee as the staged-people rule.
get_applications Β· read-onlyThe recruiting pipeline: each application's firm, program, status, deadline, and next interview date.
schedule_interview Β· writePuts an interview round on an application's timeline β and so on the user's calendar. Works forward (scheduled) or backward (completed: true with an outcome). Every save also runs the app's own sync: the application's next-interview date recomputes and its status advances along the workspace's real stage ladder (never downgrading, never reopening a closed outcome).
add_application / update_application Β· pipelineadd_application opens a pipeline row (firm + program; defaults to Watching; duplicates refused). update_application moves it the way the app's board does β status changes append to the stage history and backfill the applied date β and records outcomes (offer_accepted / offer_declined / rejected / withdrawn). Offered comp figures fill only where the user hasn't entered their own; differences are reported, never applied.
get_tasks / complete_task / snooze_task Β· the to-do loopNo reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/calaf-2)<a href="https://allmcps.com/mcp/calaf-2"><img src="https://allmcps.com/api/badge/calaf-2?style=directory" alt="Calaf on AllMCPs" /></a>