Skip to main content
Glama

Capacities MCP Enhanced — API 2.0 for AI Agents

The official MCP server sucks, it's time to make a new one.

Built for the new Capacities API 2.0 with native precise block level CRUD support.

Capacities MCP brings rich, read-write access to your knowledge base through one agent-friendly server. Agents can discover your object types, understand custom properties, create polished content, make precise edits, save web resources, and work with Daily Notes.

✨ Why Capacities MCP Enhanced

  • ✍️ Markdown & structured block authoring — combine fast Markdown workflows with precise Capacities-native block editing in one server.

  • 🧩 Full CRUD with Capacities API 2.0 — objects, custom properties, collections, blocks, web links, tasks, tags, and Daily Notes.

  • 🤖 Designed for autonomous agents — live schema discovery, consistent responses, focused tools, and clear recovery information.

  • 📤 Agent-friendly MCP file uploads — support multi-file and large-file uploads with built-in MCP progress reporting, streaming transfers, upload verification, and long-running job tracking.

  • 🔑 API key pooling — distribute requests across multiple API keys, improve throughput under rate limits, and provide resilient API access for high-volume workloads.

  • 🔒 Concurrency-safe object operations — same-object reads can run concurrently, while writes use an exclusive lock and automatically wait for active reads or other writes; different objects proceed concurrently.

  • 🎨 Faithful rich content — headings, nested blocks, grids, toggles, tasks, links, entity references, colors, code, and math.

  • 📚 Bundled best-practice skill — a complete agent operating guide is included, so a model can use the server correctly without already knowing Capacities.

Related MCP server: SpaceTraders MCP Server

🚀 Quick start

Requirements

  • Node.js 20+ or Bun 1.3+

  • One or more personal API keys from the new Capacities API with the permissions you need

Installation

Configure your MCP client to use the Capacities MCP server:

Generate a token in Capacities → Settings → Capacities API → Generate new token. New API tokens begin with cap-api-.
Configuring at least 3 tokens with same space and permissions is recommended to avoid rate-limit errors.

Claude Code

{
  "mcpServers": {
    "capacities": {
      "command": "npx",
      "args": ["--yes", "capacities-mcp-enhanced@latest"],
      "env": {
        "CAPACITIES_API_TOKEN": "cap-api-key-1,cap-api-key-2;cap-api-key-3"
      }
    }
  }
}

Hermes Agent

mcp_servers:
  capacities:
    command: "npx"
    args:
      - "--yes"
      - "capacities-mcp-enhanced@latest"
    env:
      CAPACITIES_API_TOKEN: "cap-api-key-1,cap-api-key-2;cap-api-key-3"
    supports_parallel_tool_calls: true

Install the bundled skills (Optional)

By installing the Capacities MCP Best Practices skill, your agent can learn the full workflow, strict content schemas, safe mutation patterns, rate-limit recovery, and common pitfalls.

npx skills add nyrest/capacities-mcp-enhanced

🧰 What agents can do

Category

Tool

What it does

Discover and read

inspect_space

Discover structures, properties, labels, and available write options.

Discover and read

search_objects

Find objects by title, optionally within selected structures.

Discover and read

list_objects

List cursor-paginated object summaries by structure, tag, or collection.

Discover and read

get_object

Read a complete object as structured content or Markdown.

Create objects

create_object

Create a Page, Task, Tag, or custom object with structured content.

Create objects

create_object_markdown

Create an object from a Markdown document.

Create objects

create_object_from_url

Save a web resource with structured notes.

Create objects

create_object_from_url_markdown

Save a web resource with Markdown notes.

Update content

update_object

Update titles, typed properties, and collections.

Update content

append_content

Add structured blocks to an object.

Update content

append_content_markdown

Add Markdown content to an object.

Update content

update_block

Precisely edit one existing block.

Update content

delete_block

Remove one block and its nested content.

Update content

delete_object

Move an object to trash or permanently delete it when explicitly requested.

Daily Notes

append_daily_note

Add structured blocks to today's or a dated Daily Note.

Daily Notes

append_daily_note_markdown

Add Markdown to today's or a dated Daily Note.

Media uploads

upload_files

Stream one or more local files into Capacities media objects with readback verification.

Media uploads

manage_upload_job

Inspect, wait for, or cancel an in-process background upload job.

search_objects is title-only discovery. Use list_objects when you already know a structure, tag UUID, or collection UUID and need membership listing; follow nextCursor while hasMore is true, then pass selected object IDs to get_object for full content.

upload_files accepts absolute local file paths only; relative paths, directories, and empty files are rejected. Background upload jobs live only in the current MCP process and retain terminal status for a limited time.

Supported environment variables and configuration options

Setting

Required

Default

Description

CAPACITIES_API_TOKEN

Yes, unless every call supplies apiToken

—

One API key or a comma/semicolon-separated key pool. The keys must belong to the same space and use the same permissions.

CAPACITIES_MCP_READBACK

No

true

Set to false to disable ordinary mutation readback. Rollback verification remains enabled. Accepted values: true, false.

Per-call configuration is exposed through the optional apiToken argument on all tools. It overrides CAPACITIES_API_TOKEN for that call and accepts the same key-pool syntax.

⚙️ API key pool and rate limits

CAPACITIES_API_TOKEN and the per-call apiToken option accept multiple API keys separated by , or ;. Keys are selected with round-robin scheduling independently for each endpoint, skipping keys currently marked as rate-limited.

All keys in one pool must belong to the same space and have the same permissions. At least 3 keys are recommended; use separate MCP server instances for multiple spaces.

On 429, the pool immediately fails over to another key that is not rate limited. The error is returned only when all keys are rate limited. No waiting, exponential backoff, or cross-pool retry is performed.

🚅 Concurrency and safe writes

Reads for the same object can run concurrently. A mutation obtains an exclusive object lock, so it waits for active reads and other writes; reads arriving during a write wait as well. Operations for different objects proceed concurrently. This protects the full read → mutate → readback lifecycle against last-write-wins races. The Capacities SDK does not expose request cancellation/timeout configuration, so ordinary SDK-backed calls do not use an unsafe client-side timeout race. Multipart media upload is the sole direct-HTTP path: it retains native AbortSignal cancellation, explicit per-part progress, pooled-key failover, and independent SDK readback verification.

🛠️ Development

bun run lint
bun run typecheck
bun test
bun run build
bun run verify:tools

The final local release gate is:

npm run release:check
npm publish --dry-run --access public

npm publish --dry-run validates the package without publishing it. Actual publishing additionally requires an authenticated npm account.

Live API tests are available through bun run test:live when a dedicated test token is configured.

📚 Documentation

Available Tools

18 tools
append_contentAppend Capacities contentA

Append structural API 2.0 blocks to an existing object, optionally at the start, after a known block, inside a parent block, or in a specific block property.

Inputs: id (required), blocks (required), apiToken, position, +3 more. Returns: data, error, isError

append_content_markdownAppend Markdown to Capacities objectA

Explicitly append Markdown to an existing object. Use append_content for the preferred structural JSON-block workflow. Markdown conversion is lossy for exact underline styling, toggle details, Grid layout, and HTML background colors; inspect lossReport.

Inputs: id (required), markdown (required), apiToken, position, +3 more. Returns: data, error, isError

append_daily_noteAppend Capacities daily noteA

Append structural API 2.0 blocks to today's or a specified Capacities daily note. The Capacities API queues this write asynchronously, so success means accepted/queued rather than immediately readable.

Inputs: blocks (required), date, apiToken, noTimestamp. Returns: data, error, isError

append_daily_note_markdownAppend Markdown to Capacities daily noteA

Explicitly append Markdown to a Capacities daily note. Use append_daily_note for the preferred structural JSON-block workflow. The API queues this write asynchronously and lossReport is preflight-only; Markdown conversion is lossy for exact underline styling, toggle details, Grid layout, and HTML background colors.

Inputs: markdown (required), date, apiToken, noTimestamp. Returns: data, error, isError

create_objectCreate Capacities objectA

Preferred structural creator for Page, Tag, Task, or custom structures. It loads the live structure, rejects unsupported types and invalid properties, resolves label names, and accepts only strict documented API 2.0 blocks. Use create_object_from_url for weblinks.

Inputs: title (required), structure (required), blocks, fields, +2 more. Returns: data, error, isError

create_object_from_urlCreate Capacities object from URLA

Create a Capacities web-resource object from a URL, optionally adding structural API 2.0 blocks. This is the preferred URL-import tool; use create_object_from_url_markdown only when Markdown authoring is specifically requested.

Inputs: url (required), title, blocks, apiToken, +1 more. Returns: data, error, isError

create_object_from_url_markdownCreate Capacities URL object from MarkdownA

Explicitly create a Capacities web-resource object from a URL and Markdown notes. Use create_object_from_url for the preferred structural-block workflow; conversion is lossy for exact underline styling, toggle details, Grid layout, and HTML background colors, so inspect lossReport.

Inputs: url (required), markdown (required), title, apiToken, +1 more. Returns: data, error, isError

create_object_markdownCreate Capacities object from MarkdownA

Explicitly create a Capacities object from a Markdown body. Use create_object for the preferred structural JSON-block workflow; Markdown conversion is lossy for exact underline styling, toggle details, Grid layout, and HTML background colors, so inspect lossReport.

Inputs: title (required), markdown (required), structure (required), fields, +2 more. Returns: data, error, isError

delete_blockDelete Capacities blockA
Destructive

Delete one existing Capacities block by object ID and block ID. Nested child blocks are deleted with their parent; read structured content first and use only when the deletion is intentional.

Inputs: id (required), blockId (required), apiToken. Returns: data, error, isError

delete_objectDelete Capacities objectA
Destructive

Delete a Capacities object. The safe default moves it to trash; permanent deletion requires permanent=true.

Inputs: id (required), apiToken, permanent. Returns: data, error, isError

get_objectRead Capacities objectA
Read-onlyIdempotent

Read one Capacities object by UUID. Structured JSON is the default and is safe to feed into follow-up edits; request markdown only for a compact, read-only proposal or context view.

Inputs: id (required), format, apiToken. Returns: data, error, isError

inspect_spaceInspect Capacities spaceA
Read-onlyIdempotent

Inspect the token-bound Capacities space. Without a structure, returns a compact object-type catalog; with a structure ID/name, returns its property definitions, label options, allowed relation types, and collections. Call this before unfamiliar create/update operations.

Inputs: refresh, apiToken, structure. Returns: data, error, isError

list_objectsList Capacities objectsA
Read-onlyIdempotent

List one cursor-paginated page of Capacities object summaries by structure, tag, or collection. Use search_objects for title matching and get_object for full object content.

Inputs: filter (required), cursor, apiToken, pageSize. Returns: data, error, isError

manage_upload_jobManage Capacities upload jobA
Destructive

Manage an in-process Capacities upload job returned by upload_files in background mode. status is immediate, wait blocks up to timeoutSeconds, and cancel aborts pending sessions while preserving already completed media objects.

Inputs: jobId (required), action (required), apiToken, timeoutSeconds. Returns: data, error, isError

search_objectsSearch Capacities objectsA
Read-onlyIdempotent

TITLE-ONLY search for Capacities objects, optionally filtered by discovered structure names or IDs. It never searches body blocks or property values. Returns IDs and titles for get_object or relation fields.

Inputs: query (required), limit, apiToken, structures. Returns: data, error, isError

update_blockUpdate Capacities blockA
Idempotent

Update one existing Capacities block in place using strict structural API 2.0 JSON. Read get_object in structured mode first. The type must match; omitted blocks/columns preserve children, while supplied children replace them.

Inputs: id (required), block (required), blockId (required), apiToken, +1 more. Returns: data, error, isError

update_objectUpdate Capacities objectA
Idempotent

Update an object's title, writable typed properties, or collections after loading its live structure schema. Supplied fields replace that property; omitted fields stay unchanged. Use append_content or update_block for body content.

Inputs: id (required), title, fields, apiToken, +1 more. Returns: data, error, isError

upload_filesUpload Capacities media filesA

Upload one or more local files to Capacities as media objects. Streams multipart files without loading them into the model or memory, verifies each completed object with GET, and returns partial results when independent files fail. Use mode=background for long or large batches, then manage_upload_job for status, wait, or cancel.

Inputs: files (required), mode, apiToken, collections. Returns: data, error, isError

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 18 tools

    Disambiguation3/5

    Several tools are paired as structural vs Markdown variants (append_content/append_content_markdown, create_object/create_object_markdown, create_object_from_url/create_object_from_url_markdown), so there is real overlap despite helpful descriptions. The core resource verbs are otherwise distinct, but an agent could still misselect between the preferred structural tool and its Markdown alternative.

    Naming Consistency5/5

    All tool names follow a consistent lower_snake_case verb_noun pattern: append_content, create_object, update_block, delete_object, upload_files. Suffix modifiers like _markdown and _from_url are applied uniformly, making the tool families predictable and scannable.

    Tool Count4/5

    At 18 tools, the server sits slightly above the ideal 3-15 range, mainly because every structural operation has a Markdown counterpart. The core CRUD, block editing, search, daily-note, URL import, and file-upload functionality is relevant, so the count is reasonable rather than bloated.

    Completeness4/5

    The server covers the main lifecycle well: object create/read/update/delete, block append/update/delete, search/listing, daily-note appending, URL import, and file uploads. Minor gaps exist around explicit relation editing and daily-note lifecycle management, but they can be worked around with existing tools.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that enables AI agents to interact with the SpaceTraders API, managing agents, fleets, contracts, and trading operations in the SpaceTraders universe.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.
      3 npm
      2
      MIT