This project provides several methods for connecting to the Capacities note taking app API using the Model Context Protocol (MCP). It was 100% vibe-coded with the help of Gemini 2.5 Pro. While it works, it relies on third-party adapter services and, in some cases, your own hosting. Use at your own risk.
For everyone looking for a native Bun implementation, there exists another project https://github.com/jem-computer/capacities-mcp
- Setup for Claude Desktop (with Node.js Bridge)
- Use this if you need to connect Claude Desktop and it requires simple tool names.
- Setup for Simple SSE Clients (CLion, VS Code)
- Use this for a direct connection from a compatible IDE plugin.
- Advanced Setup for Genspark (Self-Hosted Server)
- The most reliable and robust method. Use this for Genspark or any other client if you have your own server/VPS.
- A Capacities API Token. You can generate this from your Capacities account settings if you have a paid account.
- The MCP Link Generator tool: https://mcp-link.vercel.app/
This method uses the included capacities-claude-bridge.js
script to act as a translator between Claude Desktop (which needs simple tool names) and the MCP adapter (which creates complex names).
-
Install Node.js: Go to the official Node.js website and download and install the LTS version for your operating system.
-
Download the Bridge Code: Open a terminal (like Git Bash, Command Prompt, or PowerShell) and run the following commands:
# Clone the repository to a permanent location git clone https://github.com/natkitten/capacities-mcp-bridge-unofficial.git # Navigate into the project folder cd capacities-mcp-bridge-unofficial
-
Install Dependencies: While inside the
capacities-mcp-bridge-unofficial
folder, run:npm install
- Go to mcp-link.vercel.app.
- Fill in the form:
- OpenAPI Specification URL:
Use this specific URL for the Claude bridge setup. It uses snake_case
operationId
s.https://gist.githubusercontent.com/natkitten/e6ce1335c2cdad87a9237156c5cda315/raw/capacities_openapi_2.json
- API Base URL:
https://api.capacities.io
- HTTP Headers: Enter your Authorization header:
Authorization: Bearer YOUR_CAPACITIES_API_TOKEN
- Path Filters: Leave this field completely empty.
- Encoding Options: Select "Base64 (JSON Encoded)".
- OpenAPI Specification URL:
Use this specific URL for the Claude bridge setup. It uses snake_case
- Click "Generate MCP Link" and copy the resulting URL.
- Open the
capacities-claude-bridge.js
file (located in the folder you just downloaded) in a text editor. - Paste the URL you just copied, replacing the placeholder text for the
SSE_URL
constant.const SSE_URL = 'https://mcp-openapi-to-mcp-adapter.onrender.com/sse?code=...'; // YOUR URL HERE
- Save the file.
- Open File Explorer and navigate to your Claude Desktop config file by pasting this path into the address bar:
%APPDATA%\Claude Desktop\claude_desktop_config.json
- Open the file and add the
mcp_bridges
section as shown below.CRUCIAL: Replace{ "mcpServers": { "capacities": { "command": "node", "args": ["C:\\path\\to\\your\\capacities-mcp-bridge-unofficial\\capacities-claude-bridge.js"] } } }
C:\\path\\to\\your\\capacities-mcp-bridge-unofficial
with the actual, absolute path to the folder where you cloned the repository. Remember to use double backslashes\\
. - Save the
claude_desktop_config.json
file and restart Claude Desktop.
Endpoint | What it does | Typical use-case |
---|---|---|
GET /spaces |
Lists all Capacities spaces the token can access | Show a picker or verify the token |
GET /space-info |
Returns structures, collections & property definitions of a space | Needed once at startup to map IDs to human labels |
GET /search |
Full-text or title search across one or many spaces | Let the LLM find existing notes before it creates new ones |
POST /save-weblink |
Saves an external URL (and optional tags/markdown) into a space | Quick bookmarking from chat |
POST /save-to-daily-note |
Appends Markdown to today’s daily note in a space | Fast journaling / meeting-note dump |
Current rate-limits (per user / 60 s window):
/spaces
&/space-info
: 5 requests/search
: 120 requests/save-weblink
: 10 requests/save-to-daily-note
: 5 requests
For everything else (errors, structures, OpenAPI spec), see the official docs ➜ https://api.capacities.io/docs/.
Claude.-.12.June.2025.mp4
This method is for MCP plugins that can handle the mcplink_...
tool names directly. No bridge script is needed.
- Follow Step 1.2 above to generate your unique Server URL from
mcp-link.vercel.app
, using thecapacities_openapi_2.json
and leaving "Path Filters" empty. - Find the MCP configuration file for your IDE. It's often located at
YOUR_HOME_DIRECTORY/.mcp/servers.json
. - Add the following entry, replacing the placeholder with your generated URL:
{ "servers": { "capacities": { "url": "PASTE_YOUR_GENERATED_URL_HERE" } } }
- Restart your IDE. The tools should appear with their full
mcplink_...
names.
This is the most reliable method. It runs the MCP server on your own VPS. This setup requires a slightly different OpenAPI spec to work around a parser bug in the self-hosted server package.
- Connect to your VPS via SSH (
ssh root@YOUR_VPS_IP
). - Install
nvm
(Node Version Manager):curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
- Activate
nvm
:export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
- Add
nvm
to your shell profile so it loads automatically on every login:echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc
- Install Node.js (LTS version):
nvm install --lts
- Create a project directory on your VPS and navigate into it:
mkdir capacities-mcp-server cd capacities-mcp-server
- Initialize a Node.js project: This creates the
package.json
file.npm init -y
- Set the project type to "module": Open the
package.json
withnano package.json
and add"type": "module",
after the"main": "index.js",
line. - Install
pm2
and the server package locally: We install them here to keep the project self-contained.npm install pm2 @ivotoby/openapi-mcp-server
-
Create an
ecosystem.config.cjs
file forpm2
. The.cjs
extension is important.nano ecosystem.config.cjs
-
Paste the following configuration into the file. This uses the locally installed
pm2
and server script.module.exports = { apps : [{ name : 'capacities-mcp', script : './node_modules/@ivotoby/openapi-mcp-server/dist/cli.js', args : [ '--openapi-spec', 'https://gist.githubusercontent.com/natkitten/37e88b5dab4195b0f4d650f31f5505bf/raw/capacities_openapi_3.json', '--api-base-url', 'https://api.capacities.io', '--headers', 'Authorization:Bearer YOUR_CAPACITIES_API_TOKEN', '--toolNameFormat', '**', '--transport', 'http', '--host', '0.0.0.0', '--port', '8448' // Or your preferred port ] }] }
Replace
YOUR_CAPACITIES_API_TOKEN
with your actual token. -
Save and exit (
CTRL + X
,Y
,Enter
).
- Start the server using the local
pm2
:./node_modules/pm2/bin/pm2 start ecosystem.config.cjs
- Check logs to confirm it's listening on your port:
pm2 logs capacities-mcp
- Save the configuration for reboots:
pm2 save
- Enable
pm2
on startup: Runpm2 startup
and follow the on-screen instructions.
- Firewall: Open your chosen port (
8448
in this example) on both your VPS firewall (sudo ufw allow 8448
) and your cloud provider's firewall (in the Hostinger dashboard). - Caddy: For a secure HTTPS URL, set up a reverse proxy in your
Caddyfile
.Reload Caddy to apply the changes (mcp.yourdomain.com { reverse_proxy localhost:8448 }
sudo systemctl reload caddy
). - Genspark:
- Server Type:
StreamableHttp
- Server URL:
https://mcp.yourdomain.com/mcp
(using the/mcp
path). - Request Header:
{"Content-Type": "application/json"}
- Server Type:
- Add the server and test it.
Licensed under the MIT License — see LICENSE for details