MCP Reference
Plug your reading life into your AI agent.
The Spine MCP server exposes your bookshelf, your reading companion, and the full Spine catalog to any Model Context Protocol client — Claude Desktop, Cursor, Goose, and more. Thirty-six tools, one API key, and your agent can search, shelve, review, and ask your companion about any book on your behalf.
Overview
MCP is a standard from Anthropic for exposing tools and resources to AI models over a local stdio process. When you install the Spine MCP server, your AI client can see a catalog of tools it can call — each one hits the Spine API as you.
In practice, this means you can say things like "add Piranesi to my shelf," "what should I read next?", or "I just finished The Sparrow — loved it" and your agent will handle the entire flow without opening the app.
Install
The MCP server is a single-file TypeScript program that runs on Bun or Node 18+.
# clone the Spine repo (private beta access required)
$ git clone git@github.com:Jbern16/spine.git
$ cd spine/apps/mcp
$ bun install
# verify it runs (it'll wait on stdio)
$ SPINE_API_KEY=sk_spine_... bun src/index.ts
#developer-access).
Authenticate
The server reads two environment variables:
SPINE_API_KEY(required) — your personalsk_spine_…key. The server exits immediately if this is missing.SPINE_API_URL(optional) — defaults tohttps://spine-api.fly.dev. Only change this if you're running Spine against a custom API.
Generate your key in the Spine mobile app: Settings → API Key → Generate. Your key acts as you — same permissions as your mobile session, no scopes. Any MCP tool your agent calls runs on your account.
Claude Desktop
Edit your Claude Desktop config file. On macOS that's ~/Library/Application Support/Claude/claude_desktop_config.json; on Windows it's %APPDATA%\Claude\claude_desktop_config.json.
{
"mcpServers": {
"spine": {
"command": "bun",
"args": ["run", "/absolute/path/to/spine/apps/mcp/src/index.ts"],
"env": {
"SPINE_API_KEY": "sk_spine_your_key_here"
}
}
}
}
Restart Claude Desktop. You should see a little tools icon in the input bar; click it to verify the Spine tools are loaded.
Cursor
Cursor reads MCP configs from ~/.cursor/mcp.json. Same shape as Claude Desktop:
{
"mcpServers": {
"spine": {
"command": "bun",
"args": ["run", "/absolute/path/to/spine/apps/mcp/src/index.ts"],
"env": {
"SPINE_API_KEY": "sk_spine_your_key_here"
}
}
}
}
Other clients
Any MCP client that supports stdio servers should work. The command is always bun run <path to index.ts> (or node dist/index.js if you build first), and the only required env var is SPINE_API_KEY.
The server identifies itself as spine version 0.1.0, so you'll see it under that name in most MCP UIs.
First prompt
Once the server is wired up, try prompts like these:
- "Search my Spine shelf for books I marked 'loved' in the last month."
- "Add Piranesi by Susanna Clarke to my want-to-read list."
- "I just finished The Sparrow. Mark it read, loved."
- "Build me a shelf of cozy mysteries set in bookshops."
- "What's my companion's featured recommendation today?"
Your agent decides which tool to call based on the prompt. The tool reference below documents exactly what each one does.
Books & catalog
Look up books, authors, series, and browse by mood.
Search for books by title, author, or keyword. Returns up to eight matches from the Spine catalog and ISBNdb.
- query string Search term — title, author, or keyword. required
"Search for science fiction books about space travel"
Full book details — title, author, publisher, page count, year, series info, moods, ISBN, and description.
-
bookId
string
Book ID from
search_books. required
Resolve a book by title (and optionally author) via AI search. Doesn't create anything — just tells your agent whether the book exists and returns its ID.
- title string Book title. required
- author string Author name (helps disambiguation).
Up to ten books similar to a given book. Uses the rec model and catalog metadata.
- bookId string Book ID to find similar books for. required
Series info for a book. Returns the series name and every book in reading order.
- bookId string Any book in the series. required
Author profile — bio, photo, complete bibliography, and series.
- authorName string Full author name. required
Up to ten books for a mood (Cozy & Comforting, Dark & Brooding, Thought-Provoking, and so on).
-
mood
string
The mood name. Use
list_moodsto see all options. required
Returns every available mood you can browse by. Takes no parameters.
Shelf
Manage the books on your bookcase: status, rating, and written reviews.
Books on your shelf. Filter by status.
-
status
enum
read,reading,want, orall. Default:all. - limit number 1–100. Default: 20.
Add a book to your shelf. Call search_books first to get the book ID.
- bookId string Book ID from search. required
-
status
enum
want,reading, orread. Default:want. -
rating
enum
loved,liked, ordisliked. Only valid when status isread.
Change a shelf entry's status or rating. Use get_shelf to get the entry ID.
- entryId string Shelf entry ID. required
-
status
enum
New status:
want,reading, orread. -
rating
enum
New rating:
loved,liked, ordisliked.
Remove a book from your shelf entirely.
- entryId string Shelf entry ID. required
Post a short review (max 280 characters) for a book.
- bookId string Book ID. required
- body string · max 280 Review text. required
Custom shelves
Curated sub-collections inside your bookcase — themed lists you can share or keep private.
All your custom shelves with book counts and visibility. No parameters.
Create a new custom shelf.
- name string Shelf name. required
- description string Optional description.
-
isPublic
boolean
Whether the shelf is visible to other users. Default:
true.
List the books on a specific custom shelf.
-
listId
string
Shelf ID from
list_shelves. required
Add a book from your bookcase to a custom shelf.
-
shelfEntryId
string
Shelf entry ID from
get_shelf. required -
listId
string
Custom shelf ID from
list_shelves. required
Remove a book from a custom shelf. The book stays in your bookcase.
- shelfEntryId string Shelf entry ID. required
- listId string Custom shelf ID. required
Update a custom shelf's name, description, or visibility.
- listId string Custom shelf ID. required
- name string New name.
- description string New description.
- isPublic boolean New visibility.
Delete a custom shelf. Books remain in your bookcase.
- listId string Custom shelf ID. required
Create a shelf and populate it with books by title. Each title is searched, added to your bookcase if needed, and placed on the new shelf. Reports which titles were found and which weren't.
- name string Shelf name. required
- titles string[] Book titles to search for and add. required
- description string Optional description.
-
isPublic
boolean
Visibility. Default:
true.
Ask your companion to build a themed shelf from a natural-language prompt. Returns a shelf name and curated picks with reasoning.
- prompt string Natural-language description (e.g. "literary horror with a grieving narrator"). required
Companion
Recommendations, explanations, and feedback loops with your reading companion.
Ask your companion about a specific book — why you might love it, how it fits your taste, any caveats.
- bookId string Book ID to ask about. required
Your current recommendations from your companion. No parameters.
Today's featured pick — your companion's top choice. No parameters.
Pass on a recommendation. Your companion uses the signal to refine future picks.
-
recId
string
Recommendation ID from
get_recommendations. required
Send specific feedback on a recommendation ("already read this," "not my vibe," etc.). More nuanced than dismiss_recommendation.
- recId string Recommendation ID. required
- feedback string Natural-language feedback. required
Kick off a fresh rec generation. New picks show up within a minute. No parameters.
Social
Follow other readers, see what they're shelving, and interact with their reviews and lists.
Like or unlike a review, custom shelf, or shelf entry. Calling twice undoes the like.
-
targetType
enum
review,list, orshelf. required - targetId string ID of the target. required
Follow another Spine user.
- userId string User ID to follow. required
Unfollow a Spine user.
- userId string User ID to unfollow. required
Recent activity from readers you follow — reviews, shelf additions, likes. No parameters.
Recent notifications: likes on your shelves and reviews, new followers, new recommendations. No parameters.
Mark every notification as read. No parameters.
Admin
Enrichment pipeline queue status: pending, done, failed. Useful when a book is missing metadata and you want to see whether the pipeline has processed it yet. No parameters.
Report a data issue with a book. Requires librarian status.
- bookId string Book ID. required
-
issueType
enum
bad_cover,bad_data,wrong_author, orbad_shop_link. required - note string Optional note about the issue.