Slima Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Slima Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
MCP (Model Context Protocol) Server for Slima - AI Writing IDE for Novel Authors.
Connect your Slima books to any MCP-compatible AI tool - one server, all platforms.
| Platform | Status | Notes |
|---|---|---|
| Claude Desktop | ✅ | Native MCP support |
| ChatGPT Desktop | ✅ | Developer Mode (2025.10+) |
| Gemini CLI | ✅ | Native MCP support |
| Cursor | ✅ | Native MCP support |
| VS Code | ✅ | Via MCP extensions |
| Platform | Status | Notes |
|---|---|---|
| Claude.ai | ✅ | OAuth login, no token needed |
| ChatGPT Web | ✅ | OAuth login, no token needed |
MCP became the industry standard in December 2025 when Anthropic, OpenAI, and Block co-founded the Agentic AI Foundation under the Linux Foundation.
Pick the path that matches how you use AI:
npxIf you chat with Claude or ChatGPT in a browser, this is the easiest and most future-proof option. Configure once and you will automatically get every Slima MCP update — no upgrade commands, no config edits.
MCP URL: https://mcp.slima.ai/mcp
#### claude.ai (Pro / Max / Team / Enterprise)
Slimahttps://mcp.slima.ai/mcp#### ChatGPT (Plus / Pro, Developer Mode)
Slimahttps://mcp.slima.ai/mcpAfter setup, Slima features roll out automatically on your next conversation. No restarts, no reinstalls.
Use this if you want offline-friendly operation, faster startup, or you need to run MCP alongside other stdio servers.
Recommended config — pinned to the major version so you pick up new features automatically but never break on a 1.0 release:
#### Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"slima": {
"command": "npx",
"args": ["-y", "slima-mcp@0"],
"env": {
"SLIMA_API_TOKEN": "slima_your_token_here"
}
}
}
}Get your token from Account settings → Authorized Apps or run npx slima-mcp@0 auth once to save it to disk.
#### Cursor
{
"mcpServers": {
"slima": {
"command": "npx",
"args": ["-y", "slima-mcp@0"],
"env": {
"SLIMA_API_TOKEN": "slima_your_token_here"
}
}
}
}#### Gemini CLI
gemini mcp add slima --command "npx -y slima-mcp@0"Or install it as a Gemini CLI extension (it asks for your API token once and keeps it in the system keychain):
gemini extensions install https://github.com/slima-ai/slima-mcpWhy `slima-mcp@0` instead of `slima-mcp` / `slima-mcp@latest`? Using@0pins to the current major version — npx fetches new0.x.yreleases automatically (so you get features + bug fixes), but when we ship1.0.0with breaking changes you won't silently pick it up without updating your config. We'll announce the@1switch in the release notes.
>
⚠️ This only holds if you do not also have a global `slima-mcp` install.npx pkg@<range>will happily satisfy the range from a package already on yourPATHand never contact the registry at all. Measured on 2026-09-09 with a global0.2.0present and0.3.0on npm:
>
| command | resolved | |---|---| |npx -y slima-mcp@0| 0.2.0 — used the global install | |npx -y slima-mcp| 0.2.0 — same | |npx -y slima-mcp@latest| 0.3.0 — a dist-tag forces a registry lookup | |npx -y [email protected]| 0.3.0 — the global can't satisfy an exact newer version |
>
So a stale global install makes the npx form silently stop upgrading, while the server keeps telling you to upgrade. Remove it — see below.
#### Migrating from a global install
If you already installed globally with npm install -g slima-mcp:
# Remove the old global install — REQUIRED, not just tidiness.
# Leaving it in place makes `npx -y slima-mcp@0` resolve to the old global copy
# forever (see the warning above), so you'd stay outdated while being told to upgrade.
npm uninstall -g slima-mcp
# Then change your config `command` from "slima-mcp" to the npx form above, and restart the client.
# Verify: `npx -y slima-mcp@0 --version` must print the version shown by `npm view slima-mcp version`.⚠️ Check every place you may have installed it. A global install can exist per Node version manager environment and per OS — on WSL setups it is common to have one under nvm and one under Windows' AppData/Roaming/npm, at two different versions, with only one of them on the PATH your MCP client actually uses.
Or, if you want to stay on a global install, remember to periodically run:
npm install -g slima-mcp@latestOtherwise your local client will drift from the MCP tools/schema the Slima backend exposes.
You can also clone this repo and deploy the Cloudflare Worker yourself. See wrangler.toml + npm run deploy:worker. Not required for normal use.
The hosted Remote MCP Server at https://mcp.slima.ai/mcp uses:
Slima books come in two flavors, distinguished by the book_type field. MCP behaves slightly differently for each:
📖 Writing Studio (book_type: "book") | 📝 Script Studio (book_type: "script") | |
|---|---|---|
| Creation via MCP | ✅ create_book works | ❌ use the Slima app UI |
| Read (any file) | ✅ | ✅ |
| Write / Edit / Delete | ✅ any path | ✅ only under .script_studio/planning/**/* |
Structured files (series.json, *.character, *.scene, *.storyline, *.note, *.location, season.json, episode.json) | n/a | ❌ read-only via MCP — edits must go through the Script Studio UI |
analyze_chapter (AI Beta Reader) | ✅ | ❌ not yet supported on structured scenes |
search_content | all files | structured files excluded by default; pass include_structured: true to include them |
For per-book details, ask your AI client to read the resource slima://books/{book_token}/schema — it returns a JSON spec of exactly which paths are writable/read-only for that specific book.
list_books tags every book with its studio icon (📝 / 📖) so you (and the AI) can tell them apart at a glance.
39 tools. R = read-only (never changes your book); W = changes something and says so in its description. Reads and writes are always separate tools.
| Tool | R/W | Description |
|---|---|---|
get_capabilities | R | What this server supports: writable file types, content types, tools, guides |
list_guides | R | List the Slima guides and when to load each |
load_guide | R | Load one guide in full |
list_writing_skills | R | List the writing craft procedures (develop a character, revise a scene, ...) |
load_writing_skill | R | Load one writing skill in full |
| Tool | R/W | Description |
|---|---|---|
create_book | W | Create a new Writing Studio book in your library |
list_books | R | List the books in your library (paginated) |
get_book | R | Get details of a specific book |
get_book_structure | R | Get the file/folder structure of a book |
get_writing_stats | R | Get word-count totals for a book |
| Tool | R/W | Description |
|---|---|---|
read_file | R | Read the content of any file by path |
get_chapter | R | Read a chapter by path or file name |
edit_file | W | Replace a specific text segment (search and replace) |
write_file | W | Replace the entire content of an existing file |
create_file | W | Create a new file in a book |
delete_file | W | Delete a file or an empty folder |
append_to_file | W | Append content to the end of a file |
search_content | R | Search for text across all files |
semantic_search | R | Find passages by meaning rather than exact words |
Every write is a commit in the book's version history, so it can be reviewed and reverted.
| Tool | R/W | Description |
|---|---|---|
view_relationship_map | R | See a .map relationship graph as a picture plus a readable summary |
update_relationship_map | W | Change a relationship map (.map) |
update_beat_board | W | Change a beat board (.beats) |
update_timeline | W | Change a timeline (.timeline) |
update_script | W | Change a screenplay (.script) |
update_world_map | W | Change a world map (.geomap) |
| Tool | R/W | Description |
|---|---|---|
list_notes | R | The author's margin notes on a book |
create_note | W | Leave a note beside the manuscript (does not touch the prose) |
list_comments | R | Editorial comment threads, open and resolved |
create_comment | W | Leave an editorial comment |
resolve_comment | W | Mark a comment thread addressed |
reopen_comment | W | Reopen a resolved comment thread |
| Tool | R/W | Description |
|---|---|---|
list_personas | R | List the virtual reader personas |
analyze_chapter | W | Run AI Beta Reader feedback on a chapter from one persona (spends the author's credits) |
get_reader_test | R | Collect a Beta Reader report that was still running |
| Tool | R/W | Description |
|---|---|---|
list_teams | R | List the teams this account belongs to |
get_team | R | One team: its members and roles |
list_team_rules | R | The team's coaching rules (house style) |
list_team_memories | R | What the team has established: recurring characters, naming conventions, decisions |
list_team_skills | R | The team's own writing procedures |
Once configured, you can ask your AI:
Book & Content:
File Operations:
AI Feedback:
slima-mcp auth # Authenticate with browser (recommended)
slima-mcp status # Check authentication status
slima-mcp logout # Remove saved credentials
slima-mcp --help # Show help
slima-mcp --version # Show versionToken is stored in ~/.slima/credentials.json with secure permissions.
| Variable | Required | Default | Description |
|---|---|---|---|
SLIMA_API_TOKEN | No* | - | Your Slima API token |
SLIMA_API_URL | No | https://api.slima.ai | API endpoint (for development) |
DEBUG | No | false | Enable debug logging |
*Not required if you used slima-mcp auth
# Clone the repository
git clone https://github.com/slima-ai/slima-mcp.git
cd slima-mcp
# Install dependencies
npm install
# Build CLI
npm run build
# Run tests
npm test
# Run in development mode
npm run dev# Build the Worker
npm run build:worker
# Run Worker locally
npm run dev:worker
# Deploy to Cloudflare
npm run deploy:worker
# Deploy to the test environment (test-mcp.slima.ai)
npm run deploy:worker:testslima-mcp/
├── src/
│ ├── core/ # Shared core modules
│ │ ├── api/ # Slima API Client
│ │ ├── tools/ # MCP Tool implementations
│ │ └── utils/ # Utilities and errors
│ ├── cli/ # CLI entry point (stdio transport)
│ │ ├── index.ts # CLI main
│ │ ├── auth.ts # Authentication commands
│ │ └── server.ts # MCP Server for CLI
│ └── worker/ # Cloudflare Worker (HTTP transport)
│ ├── index.ts # Worker entry point
│ └── oauth.ts # OAuth 2.0 + PKCE client
├── wrangler.toml # Cloudflare Worker config
├── tsup.config.ts # CLI build config
└── tsup.worker.config.ts # Worker build configMerge to main with a version bump in package.json triggers automatic npm publish via GitHub Actions.
# 1. Bump version on dev branch
npm version patch # 0.1.10 → 0.1.11
# 2. Merge to main
git checkout main && git merge dev && git push
# 3. CI runs tests → publish.yml publishes to npm + creates git tagWorker deployment is separate from npm, and nothing triggers it automatically. Publishing to npm does NOT update mcp.slima.ai. Remote clients (claude.ai / ChatGPT connectors) talk to the Worker, so they keep running the old tool set until someone runs this by hand:
npm run deploy:worker:test # Test (test-mcp.slima.ai -> test-api.slima.ai)
npm run deploy:worker # Prod (mcp.slima.ai -> api.slima.ai)Deploy test first and check curl https://test-mcp.slima.ai/ | jq .version before doing prod; the same one-liner against mcp.slima.ai is how you tell whether the Worker is behind npm at all.
2026-09-09: the Worker sat on 0.2.0 for four and a half months — it was last deployed the same day npm 0.2.0 shipped, so every change after that reached npm users and no connector users. There is no alarm for this; the version endpoint is the only signal.
There used to be adeploy:worker:previewscript pointing at an[env.preview]block. It was removed on 2026-09-09: its KV id was the literal placeholder string,staging-api.slima.aidoes not resolve, and — worst — it defined noroutes.routesis an inheritable key in wrangler, so that command would have inherited the top-levelmcp.slima.aicustom domain and pointed production's hostname at the preview Worker. The real staging environment is[env.test].
To publish/update the server listing on the MCP Registry:
mcp-publisher login github
mcp-publisher publishRequires mcpName in package.json and server.json in repo root.
When troubleshooting claude.ai or ChatGPT connector issues:
# Live logs from production Worker
wrangler tail slima-mcpAll OAuth endpoints log key parameters (client_id, redirect_uri, token prefix, etc.) to help trace the flow.
Client POST /mcp → 401 + WWW-Authenticate header
→ Client GET /.well-known/oauth-protected-resource
→ Client GET /.well-known/oauth-authorization-server
→ Client POST /register (DCR)
→ Client redirects user to GET /authorize
→ Worker redirects to Rails OAuth
→ User authorizes → Rails redirects to Worker /callback
→ Worker issues auth code → redirects to client callback
→ Client POST /token (exchange code for access_token)
→ Client POST /mcp (Authorization: Bearer {access_token})slima_ prefix) to support OAuth-issued tokens. Rails API performs actual validation.getTokenFromSession() checks Authorization header first, then falls back to cookie session.npx @modelcontextprotocol/inspector) is useful for testing the full OAuth flow independently.MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.