Kawa Code MCP vs AI

A side-by-side look at the Kawa Code MCP and AI MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Kawa Code MCP logoKawa Code MCPCoding Agents · Local subprocess (stdio)Intent tracking, decision recording, and team coordination for AI coding assistants61GoodAuth: not declaredAI logoAIDeveloper Tools · Local subprocess (stdio)Local-first MCP server for AI content governance — 13 tools for model/content CRUD, validation, normalization, and i18n across any framework.57GoodAuth: no auth required

Verdict: choose Kawa Code MCP for coding agents work as a local process; choose AI for developer tools as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Kawa Code MCP logoChoose Kawa Code MCP when

  • You need dedicated capabilities in the Coding Agents domain.
  • You prefer a local stdio subprocess transport.
  • You want tools like get_relevant_context, check_active_intent, create_and_activate_intent.
Explore Kawa Code MCP

AI logoChoose AI when

  • You need dedicated capabilities in the Developer Tools domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: No auth required.
Explore AI

Feature & specification comparison

Rows where the two servers differ are marked.

SpecKawa Code MCP logoKawa Code MCPAI logoAI
CategoryCoding AgentsDeveloper Tools
Quality signal61/100 · Good57/100 · Good
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNot declaredNo auth required
PricingNot declaredFree
Required env varsNone listedNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars06
Directory activity 1 views 0 installs 0 upvotes 4 views 0 installs 0 upvotes
Tools20Not listed

Tools & capabilities

Kawa Code MCP tools 20

  • get_relevant_contextFind past intents and decisions relevant to the current user request. When to use: - After you have done a quick initial exploration of the user's request and know which files are involved. Calling earlier with only a vague prompt gives weak results. - To pull task-specific context instead of dumping all recent activity — preferred for large projects. Inputs of note: - `prompt`: the user request, in their words or your paraphrase. - `activeFiles` (recommended): files you have identified as relevant to the request. Significantly improves relevance. - `maxIntents`, `maxDecisions`, `minRelevance`: result-shaping caps and threshold. Returns: - `relevantIntents`: past work units (intents) related to the task, scored by relevance. - `relevantDecisions`: prior decisions related to the task — both intent-scoped and repo-scoped. Summary-only (no inline rationale, to keep context lean); call `get_decision_detail(decisionId)` for the full rationale/context/consequences of any decision you want to open. Recommended sequence: 1. `check_active_intent` at session start to resume any existing work. 2. Briefly explore the user's request to identify involved files. 3. `get_relevant_context` with the prompt and `activeFiles` to inform the approach.
  • check_active_intentREQUIRED before writing any code. Returns this session's current intent; if there is none, confirm the details with the user and call create_and_activate_intent. Intents are active PER SESSION — many can be active on one repo at once. hasActiveIntent reflects only YOUR session, while activeIntents lists every session's current intent (yours and teammates') and may be non-empty when you have none. A stale intent stays "active"; terminal states are committed / pushed / done / abandoned / superseded.
  • create_and_activate_intentCreate a new intent from the user's request and mark it as active for THIS session. Call this when check_active_intent returns no active intent for your session. Before calling: 1. Summarize what the user is asking for 2. Ask the user to confirm the intent details (title, description, type) 3. Then call this tool with the confirmed details This ensures all AI-generated code gets properly tracked and attributed. Multi-active model: many intents can be active on a repo at once (one per session/teammate). Creating + activating one only sets YOUR session's current focus — it never blocks or displaces another session's active intent, so there is no lock conflict to resolve. If the tool returns conflicts (action="conflict"), it found an existing team-member intent that overlaps semantically or in files. Present the conflict details to the user and ask whether to proceed. If yes, retry with force=true to bypass conflict detection.
  • activate_intentActivate an existing intent by ID — sets it as THIS session's current focus. Use this to: - Switch your current focus to a different intent found via list_team_intents or get_relevant_context - Re-activate an intent that was deactivated (e.g., to complete it) - Resume work on a previously created intent - Resume an "abandoned" intent (see below) Accepts both cloud IDs (from get_relevant_context / API) and local UUIDs (from list_team_intents). Multi-active model: activating an intent only moves YOUR session's current pointer. Many intents can be active on a repo at once (one current per session/teammate), so this never blocks on or displaces another session's active intent — there is no lock to take over. Resuming abandoned intents: - Abandoned intents have their decisions soft-deleted (invisible to recall and get_relevant_context). Activating one transparently restores them — single-intent decisions for this intent get their soft-delete cleared so the prior reasoning becomes visible again. Multi-intent decisions stay visible throughout (they were never soft-deleted).
  • resume_intentResume an existing intent by ID in one call — activate it AND load its recorded decisions. Use this to pick up a handoff. When a prompt says "follow up on intent <id>" (or you otherwise want to continue a specific existing intent), call resume_intent(<id>) instead of creating a new one. It: - activates the intent as THIS session's current focus (multi-active — never displaces a teammate's active intent), and - returns the intent's title/description/status plus its recorded decisions (summary-only; call get_decision_detail(id) for full rationale on any one). This is the fast path for cross-developer handoff without a session or transcript export: the reasoning lives in Kawa Code, so a teammate resumes the thread from just the intent id. For the code itself, the intent's owner should have committed or pushed first (a prompt carries reasoning, not an uncommitted working tree). Returns { resumed, intentId, intent?, decisions[], count, message }. resumed=false with a message when the id can't be activated.
  • get_intents_for_fileIntents with code blocks in a file, so you can see in-progress work and team conflicts before editing. Pass startLine + endLine to narrow to a range; the result then reports the exact overlap and warns when it hits a teammate's active intent.
  • list_team_intentsList intents from team members for this repository. Use this to: - See what your team is working on - Check for potential overlapping work before starting a new task - Review the status of various features/refactors in progress Filtering (status, author, date range) and pagination are applied server-side across the full result set (default: 50 per page; use limit/offset to page). `count` is the total number of matching intents, not just the returned page.
  • complete_intentMark the active intent completed and clear it. Call after a successful git commit, passing commitSha so code blocks are captured. status: committed (default, local commit) | pushed | done | abandoned. You MUST inspect the response: - success === true — done. If committedDecisionCount > 0, say N decisions were recorded; do NOT list them. If apiSyncDeferred, say the sync was deferred and will replay. If collisions is non-empty, relay it as an advisory coordination heads-up (collisions[].label + files) — the completion still succeeded. If deferredConflicts is non-empty, the completion ALSO succeeded; say "N decision(s) need a disposition in the Kawa Code panel" and do NOT re-run this tool. - success === false && reason === "transient-failure" — the intent stays active and nothing was lost. Report failedStage plus the error; retry once the cause clears, or abandon if it persists. Autonomous sessions: deferredConflicts is not a blocking state — log and continue.
  • update_intentUpdate an active intent's title, description, scope, or constraints. Use this to reformulate an intent as understanding evolves during work. Intents are living documents — they should be updated to reflect what the work actually became, not left as the initial guess. Common triggers for reformulation: - The real problem turned out to be different from the initial hypothesis - Scope expanded or narrowed during investigation - The approach changed after discovering constraints If no intentId is provided, the currently active intent is updated.
  • log_workDEPRECATED — trivial changes (typos, one-line fixes, obvious bugs, doc updates, config changes) should skip the intent workflow entirely: just make the change and commit, no intent needed. Do not call this tool. Kept available for backwards compatibility only and will be removed in a future release.
  • record_decisionSilently record a decision point during development. Call this tool when you: - Choose between multiple alternatives (type: fork) - Try an approach that fails or is rejected (type: abandoned) - Find unexpected behavior or limitations (type: discovery) - Identify a hard constraint that must be respected (type: constraint) - Make an explicit trade-off between competing concerns (type: tradeoff) - Select an external library or dependency (type: dependency) Decisions can be **intent-scoped** (tied to a specific work unit) or **repo-scoped** (general knowledge like discoveries and constraints). Omit intentId for repo-scoped decisions. Decisions are accumulated silently during the session and presented for review before commit. This creates a "reasoning changelog" that captures not just what was done, but why. IMPORTANT: Include constraintViolations when alternatives are rejected due to architectural constraints.
  • get_session_decisionsGet all decisions recorded in the current session for an intent. Use this before committing to review what decisions were captured during development. Decisions are presented for user review and can be edited or removed before being persisted. Returns: - intentId: The intent these decisions belong to - decisions: Array of decision points (summary-only — call get_decision_detail(decisionId) for full rationale/context/consequences/alternatives) - count: Number of decisions recorded
  • +8 more on the listing page

AI tools

No tool names declared yet. Check the project README from the listing page.

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Kawa Code MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "kawa-code-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@kawacode/mcp"
      ]
    }
  }
}

AI

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "contentrain-ai": {
      "command": "npx",
      "args": [
        "-y",
        "contentrain"
      ]
    }
  }
}

Frequently asked questions

Kawa Code MCP is categorized under Coding Agents and uses a local stdio subprocess. AI belongs to Developer Tools and uses a local stdio subprocess. Pick Kawa Code MCP for coding agents work and AI for developer tools.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Kawa Code MCP has no declared pricing — check the project's own site. AI is listed as free. Auth: no auth required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add kawa-code-mcp and contentrain-ai as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Kawa Code MCP has a quality signal of 61/100 (Good) with 1 views, 0 installs and 0 GitHub stars. AI has 57/100 (Good) with 4 views, 0 installs and 6 GitHub stars.