kanka-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KANKA_TIER | No | ‘free’ or ‘subscriber’, auto-detected from /profile | |
| KANKA_TOKEN | No | Kanka Personal API token (one of token or OAuth required) | |
| KANKA_BASE_URL | No | Override the API base (for testing) | |
| KANKA_LOG_LEVEL | No | Log level: trace, debug, info, warn, error, fatal | |
| KANKA_TOKEN_FILE | No | Fallback token file location | |
| KANKA_OAUTH_BASE_URL | No | Override the OAuth host (for testing) | |
| KANKA_OAUTH_CLIENT_ID | No | OAuth app client id (register at app.kanka.io/settings/api-apps) | |
| KANKA_OAUTH_TOKEN_FILE | No | Where access + refresh tokens are persisted | |
| KANKA_MAX_RESPONSE_BYTES | No | Hard cap on response body size | |
| KANKA_RATE_LIMIT_PER_MIN | No | Hard override on rate-limit bucket capacity | |
| KANKA_REQUEST_TIMEOUT_MS | No | Per-request HTTP timeout in milliseconds | |
| KANKA_OAUTH_CLIENT_SECRET | No | OAuth app client secret | |
| KANKA_OAUTH_REDIRECT_PORT | No | Pin the loopback callback port |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| kanka_auth_statusA | Check whether the server has a usable Kanka credential and where it came from (env var, token file, OAuth, or none). Call this first if other tools return AUTH_REQUIRED — it'll tell you what's missing. |
| kanka_oauth_loginA | Run the OAuth 2.0 Authorization Code flow with PKCE. Opens a browser to the Kanka authorize page; on approval, persists access + refresh tokens to disk so subsequent tool calls authenticate transparently. Requires an OAuth app registered at https://app.kanka.io/settings/api?clients=1. Provide client_id/client_secret here or via KANKA_OAUTH_CLIENT_ID / KANKA_OAUTH_CLIENT_SECRET env vars. |
| kanka_auth_logoutA | Clear stored OAuth tokens (access + refresh). Personal API token configured via env or file is unaffected. |
| kanka_list_campaignsA | Discover which Kanka campaigns the authenticated user can access. Call this first to find the |
| kanka_get_campaignB | Fetch metadata for a single campaign by id. |
| kanka_describe_entity_typeA | Return the JSON Schema for the create/update payload of a Kanka entity type. Call this before kanka_create_entity or kanka_update_entity to discover required and optional fields. |
| kanka_searchA | Find entities by NAME within a campaign — fast, server-side, but matches names only (no entry/body text). Prefer this when you know the entity name. For matching against entry text, use kanka_full_text_search instead. For listing/browsing, use kanka_list_entities. |
| kanka_full_text_searchA | Search across the body text (entry HTML) of entities by paginating typed list endpoints, stripping HTML, and matching locally. Costs API budget — narrow |
| kanka_list_entitiesA | Browse a campaign's entities. Use this to enumerate, page through, or filter by type / name / tags. For looking up a specific entity by id, prefer kanka_get_entity. For text-content search, use kanka_full_text_search. Incremental sync: pass |
| kanka_get_entityB | Fetch a single entity by either its type-scoped id (requires entity_type) OR its global entity_id. The dual-ID system is resolved transparently: if you only know entity_id, the resolver will discover the type and fetch the typed record. |
| kanka_create_entityA | Create a new entity. Call kanka_describe_entity_type first to discover the per-type schema for |
| kanka_update_entityA | Partial update (PATCH) on an existing entity. Provide only the fields you want to change. The |
| kanka_delete_entityA | Permanently delete an entity. Requires |
| kanka_postsA | List, read, create, update, or delete the posts (sub-notes) attached to an entity. Posts hang off the GLOBAL entity_id, not the type-scoped id. Provide |
| kanka_relationsA | List, read, create, update, or delete relations between entities. Relations hang off the GLOBAL entity_id of the source. The |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Most tools have clearly distinct purposes (e.g., create vs. update vs. delete, search vs. full text search vs. list). However, kanka_search and kanka_full_text_search could be confused if descriptions are overlooked, and kanka_list_entities overlaps slightly with browse/search capabilities.
Tools generally follow a 'kanka_verb_noun' pattern, but 'kanka_posts' and 'kanka_relations' are nouns only, breaking consistency. The use of 'full_text_search' with underscores is fine, but the mix of verbs and bare nouns is noticeable.
With 15 tools, the server covers authentication, campaign management, entity CRUD, posts, relations, search, and schema discovery without feeling bloated. Each tool addresses a distinct need, and the count is appropriate for the domain.
The tool surface covers essential CRUD for entities, posts, and relations, plus search and auth. Minor gaps: there is no tool to list entity types or manage campaigns beyond fetching metadata, but these are not critical for typical workflows.