Kawa Code MCP
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
| prompts | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_relevant_contextA | Find past intents and decisions relevant to the current user request. When to use:
Inputs of note:
Returns:
Recommended sequence:
|
| check_active_intentA | REQUIRED: Call this tool BEFORE writing any code. Returns THIS session's current intent ( Multi-active model: the active intent is PER SESSION. Many intents can be active
on a repo at once — your current is independent of other sessions'/teammates'.
The response also includes An active intent tracks what the user is working on, enabling:
Status semantics:
|
| create_and_activate_intentA | Create 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:
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_intentA | Activate an existing intent by ID — sets it as THIS session's current focus. Use this to:
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:
|
| get_intents_for_fileA | Get all intents that have code blocks in this file. Use this before modifying a file to:
Returns intent details including author, status, and specific line ranges. |
| get_intents_for_linesA | Get intents covering a specific line range. Use this before modifying specific lines to check for conflicts:
Returns overlap details so you can work around or coordinate with team members. |
| list_team_intentsA | List intents from team members for this repository. Use this to:
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). |
| get_intent_changesA | Get uncommitted changes in the repository along with the active intent info. Use this tool before prompting the user about committing to show:
This helps you construct an informative commit prompt like: "You have uncommitted work on '[intent title]' (N files changed)..." |
| complete_intentA | Mark the active intent as completed and clear it. Call this after a successful git commit to:
Status values:
REQUIRED: Inspect the response after calling this tool. Three outcomes:
|
| update_intentA | Update 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:
If no intentId is provided, the currently active intent is updated. |
| log_workB | DEPRECATED — 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_decisionA | Silently record a decision point during development. Call this tool when you:
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_decisionsA | Get 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:
|
| get_project_decisionsA | Get all decisions recorded for a project across all intents. Use this to review the project's decision history:
Returns:
Each decision includes (summary-only, to keep context lean — call get_decision_detail(decisionId) for full rationale/context/consequences/alternatives):
|
| get_decision_detailA | Expand one decision to its full detail. Recall surfaces (get_relevant_context, get_project_decisions, get_session_decisions) return decisions summary-only to keep context lean. Use this to pull the full reasoning for a single decision you want to open — pay for detail only where you ask for it. Inputs:
Returns the decision's |
| edit_session_decisionA | Edit or delete a decision in the current session. Use this when reviewing decisions before commit:
Only ephemeral (in-flight) session decisions are editable. Once a decision is
synced to Kawa Code, it is immutable — refine it instead by recording a new
decision with This allows users to curate their decision history before it's persisted. |
| detect_intent_conflictsA | Find intents from other team members that potentially conflict with the active intent. When to use:
Inputs of note:
Returns scored conflict candidates with:
The list is informational — review candidates and their decisions to decide whether coordination is needed. |
| infer_historyA | Analyze a repository's git commit history and produce structured development knowledge (intents and decisions) for the repo. When to use:
Inputs of note:
Behavior:
|
| evolve_decisionsA | Curate a set of previously extracted stories so that only the decisions still worth keeping are persisted. When to use:
Inputs:
Behavior:
|
| update_featuresA | Update the project's feature catalog from its recorded intents. Additively groups any intents that are not yet assigned to a feature into the running catalog (an incremental "extend"), without disturbing existing features. The feature catalog is the high-level "what does this project actually do?" view, derived from the repo's intents. When to use:
Behavior:
|
| pre_edit_decision_checkA | Check whether the line range about to be edited has prior recorded reasoning attached. Call this BEFORE editing code in a kawa-indexed repo. Surfaces:
(Live-collaborator code-collision awareness is no longer reported here — it now arrives once per turn at the Stop hook. This tool is purely the semantic, decision-based check.) Decisions already overridden via record_decision(supersedes=...) are filtered out automatically. Recommendation maps to action:
Also returns the smallest enclosing function/method symbol via tree-sitter (Rust/TS/JS/Python only; null for other languages) for warning readability. |
| pre_edit_acknowledgeA | Mark decisions as consciously overridden for the rest of this session. Phase 3's PreToolUse hook calls this when the agent passes The cache resets when the MCP server process exits (= the agent session ends). For persistent override across sessions, record a fork decision via Returns:
|
| get_resolution_contextA | Resolve a live code collision with a peer BEFORE you write (Layer C resolution handoff). Call this when the Stop hook's collision report (or complete_intent's resolution_required gate) surfaced a live peer (a teammate or AI agent editing the same lines). Pass that collision's uid as peerUid and its overlapping ranges. You get back:
This is advisory and proactive (no lock). Use it to adapt your edit and avoid the conflict. |
| arbiter_resolveA | Get Kawa Code's AI verdict for live code overlaps with peers — SUGGEST-ONLY, never writes. For each overlap ({peerUid, filePath, ranges} from the Stop collision report), Kawa decrypts the peer's version locally (zero-knowledge) and judges it compatible / auto_resolvable / conflict, with confidence, a perf/security risk read, and a tier (0 no-op · 1 trivially auto-appliable · 2 draft-and-confirm · 3 conflict). Use it to understand a forming conflict before acting. For a surfaced tier-2/3 overlap, call get_resolution_context to read the peer's actual code. To actually apply the safe tier, use arbiter_apply. |
| arbiter_applyA | Resolve live code overlaps and AUTO-APPLY the safe tier. Kawa judges → adversarially verifies → and, for the trivial tier only (high-confidence single-range merge that passes verify), writes the merge to your worktree, records a decision, and republishes. Writes happen ONLY in an agent-owned worktree (a linked git worktree); on a human checkout — or when a peer holds the file-set lock — it behaves like arbiter_resolve (suggest-only, no writes). Returns per-overlap outcomes { tier, applied, announcement, verifyIssue?, verdict }. Call it when you are ready to incorporate the result, then RE-READ any file it applied to (it changed on disk). For surfaced (not-applied) overlaps, use get_resolution_context to see the peer code and resolve manually. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| implementation_workflow | Standard workflow for implementing code changes with intent tracking. Use this when starting any code implementation task. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Active Intent | The currently active intent for the connected repository |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kawacode-ai/kawa.mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server