CodeBrain
CodeBrain
Claude Code가 자신의 하드웨어에서 실행되는 로컬 LLM으로 대량의 작업을 오프로드할 수 있게 해주는 MCP 서버입니다.
이것은 무엇인가 (그리고 무엇이 아닌가)
무엇인가: Claude Code가 서브 에이전트 백엔드로 등록하는 MCP(Model Context Protocol) 서버입니다. 세션에 14B 로컬 코더 모델이 잘 처리할 수 있는 작업(이벤트 템플릿 50개 생성, React 컴포넌트 20개 다듬기, 보일러플레이트 작성 등)이 포함될 때, Claude Code는 자신의 출력 토큰을 소모하는 대신 CodeBrain을 호출합니다. 로컬 모델이 초안을 작성하고, Claude는 이를 검토하고 적용합니다.
무엇이 아닌가: Claude 대체재가 아닙니다. 추론, 아키텍처 결정, 디버깅 및 "적당히 좋은" 것으로는 부족한 모든 작업은 Claude가 담당합니다. CodeBrain은 Claude 경쟁자가 아니라 Claude 오프로더입니다.
이유: 대량의 콘텐츠 및 다듬기 작업은 Claude의 컨텍스트와 속도 제한을 빠르게 소모합니다. 무제한으로 실행할 수 있는 로컬 모델은 호출당 추가 비용이 들지 않으며, 세션의 어려운 부분을 위해 고가치의 컨텍스트를 자유롭게 유지할 수 있게 해줍니다.
Related MCP server: ollama-mcp
상태
1~4단계 완료, 5단계 보류. 9개의 도구 노출, .brain/context.md 패스스루 라이브, 파일별 브레인 요약 스캐너, 검증 루프, 합의 디코딩이 구현되었습니다. 실제 Claude Code 세션에서 MCP 통합이 검증되었습니다. 5단계(RAG)는 "필요한 경우에만"으로 명시적으로 범위가 지정되었으며, 현재 사용 패턴상 파일 간 검색이 병목 현상으로 나타나지 않아 보류 상태로 유지됩니다.
작동 방식
Claude Code session CodeBrain MCP server Local machine
───────────────────── stdio ─────────────────── ─────────────
Claude delegates a ────────► codebrain_generate() ────► Ollama HTTP
bulk / polish task codebrain_explain() (localhost:11434)
codebrain_status() │
▼
Qwen2.5-Coder 14B
(GPU)
Claude reviews, ◄──────── tool result string ◄──── streamed response
applies, or pushes back현재 9개의 도구가 노출되어 있습니다:
도구 | Claude가 이 도구를 사용하는 경우 |
| 대량 콘텐츠, 보일러플레이트, 반복적인 변환, 초안 작성 |
| 공유 시스템 메시지를 사용하는 N개의 프롬프트, 직렬 실행, 인덱스 안정적 오류(하나의 실패가 배치를 중단시키지 않음) |
| 기존 텍스트에 대한 타겟 변환 — 단축, 재구문, 번역, 다듬기. 출력 변경 없음 시 자동 재시도. |
| Claude 컨텍스트를 소모하지 않는 빠른 읽기 전용 설명 |
| 결정론적 검증 루프가 포함된 생성: 단어 수 / 정규식 스키마 검사, 위반 시 강화된 지침으로 재시도 |
| N개의 후보 + 판단 호출 → 최상의 단일 출력. 분산이 큰 작업에 사용. |
| 1회성 저장소 온보딩: 스택 감지, |
| 하나의 |
| 트리 탐색 + 스캔; 해시 게이트 방식, 파일별 실패가 배치를 중단시키지 않음 |
| 로컬에 설치된 모델 확인 |
생성 도구의 use_brain 플래그는 현재 작업 디렉토리의 .brain/context.md를 시스템 프롬프트 앞에 자동으로 추가하므로, Claude가 수동으로 전달할 필요 없이 프로젝트별 컨텍스트가 모든 호출에 포함됩니다.
요구 사항
Python 3.11+
Ollama — OS용 다운로드. Windows 네이티브에서
localhost:11434를 통해 통신하는 것으로 테스트됨.로컬에 풀링된 코더 모델:
ollama pull qwen2.5-coder:14b~9GB 다운로드. Q5에서 12GB VRAM에 적합. 다른 모델도 작동함(DeepSeek-Coder, Qwen3 등) —
CODEBRAIN_MODEL환경 변수를 통해 설정.Claude Code CLI (서버를 호출할 머신에 설치).
설치
git clone <this repo> CodeBrain
cd CodeBrain
python -m venv .venv
.venv\Scripts\activate # on Windows
# source .venv/bin/activate # on macOS / Linux
pip install -e .Claude Code 구성
Claude Code MCP 설정에 CodeBrain을 추가하세요. Windows의 경우 일반적으로 ~/.claude.json입니다 (복제한 경로에 맞게 조정):
{
"mcpServers": {
"codebrain": {
"command": "C:\\Users\\YOU\\Desktop\\CodeBrain\\.venv\\Scripts\\python.exe",
"args": ["-m", "codebrain"]
}
}
}Claude Code 세션을 다시 시작하면 5개의 codebrain_* 도구가 사용 가능한 도구 목록에 나타납니다.
브레인 파일을 자동으로 동기화 유지
저장소에서 codebrain_init을 실행하고 codebrain_scan_repo로 스캔한 후에는 Claude가 소스를 편집할 때마다 브레인 파일이 자동으로 새로 고쳐지기를 원할 것입니다. 이를 위해 두 가지를 설정합니다:
1. 프로젝트 CLAUDE.md 스니펫 — 소스를 열기 전에 브레인 파일을 읽도록 Claude에게 지시:
## Brain files
This repo has per-file `.brain` summaries next to each source file.
Before reading a full source file, read its `<path>.brain` sibling first.
Only open the source when the brain file is insufficient for the task.2. PostToolUse 훅 — 모든 편집/쓰기 작업 후 브레인을 재생성합니다.
저장소 루트의 .claude/settings.json에 추가:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "python -c \"import asyncio, json, sys; from codebrain.brain_scanner import scan_file; d = json.load(sys.stdin); p = d.get('tool_input', {}).get('file_path'); p and p.endswith(('.py', '.ts', '.tsx', '.js', '.jsx', '.java', '.go', '.rs')) and print(asyncio.run(scan_file(p)))\""
}
]
}
]
}
}이 훅은 편집된 경로를 검사하고, 확장자 필터를 통해 소스 파일이 아닌 파일은 건너뛰며, 스캔을 시작합니다. 해시 게이트 방식: 변경되지 않은 파일은 Qwen을 호출하지 않습니다.
상태 확인
Claude Code 세션 내에서 Claude에게 다음과 같이 물어보세요:
codebrain_status를 호출해서 무엇이 설치되어 있는지 알려줘.
Ollama가 실행 중이고 모델이 풀링되어 있다면 목록에 qwen2.5-coder:14b가 표시됩니다.
구성
백엔드에서 읽는 환경 변수:
변수 | 기본값 | 설명 |
|
| 원격 Ollama를 가리킴 (예: LAN의 추론 박스) |
|
| 풀링한 모델로 변경 |
|
| 단일 생성에 대한 대기 시간(초) |
프로젝트 구조
CodeBrain/
├── codebrain/
│ ├── __init__.py
│ ├── __main__.py # `python -m codebrain` entry
│ ├── backend.py # Ollama HTTP client
│ ├── server.py # FastMCP server + tool definitions
│ ├── brain_scanner.py # scan_file / scan_repo + hash gate
│ ├── brain_init.py # one-shot .brain/context.md seeding
│ ├── verifier.py # deterministic output checks
│ └── prompts/
│ └── brain_few_shot.md # few-shot for brain-file generation
├── tests/ # 96 unit + integration tests
├── .spec/
│ ├── CURRENT.md # phase state
│ └── brain-file-format.md # brain-file format v1
├── pyproject.toml
├── LICENSE
└── README.md로드맵
1단계 — 스캐폴드 ✓
[x] 오류 처리가 포함된 Ollama HTTP 클라이언트
[x] stdio 전송을 사용하는 FastMCP 서버
[x] 3가지 핵심 도구:
generate,explain,status[x] 문서화된 설정 + Claude Code 구성
[x] 실제 Claude Code 세션에서 검증 완료
2단계 — 배치 및 컨텍스트 ✓
[x] 공유 시스템 프롬프트를 사용하는 대량 콘텐츠용
codebrain_batch_generate, 인덱스 안정적 오류[x] 재생성 대신 타겟 변환(단축/재구문/번역)을 위한
codebrain_polish[x]
.brain/context.md패스스루 — 모든 생성 호출에 cwd 프로젝트 컨텍스트 자동 추가[x] 도그푸딩: 코딩 작업은 견고함, 텍스트 변환 작업은 실제 한계를 드러냄(3단계에 반영)
2.5단계 — 브레인 시스템 ✓
파일별 <source>.brain 요약이 각 소스 파일 옆에 위치합니다. Claude는 브레인을 먼저 읽고 브레인으로 부족할 때만 소스를 엽니다.
[x]
codebrain_scan_file(path, force)— 브레인 파일 생성 또는 새로 고침[x]
codebrain_scan_repo(root, force, extensions, exclude_dirs)— 대량 탐색 + 스캔[x]
codebrain_init(root, force)— 스택 감지를 통한.brain/context.md시드[x] 해시 게이트 방식 재생성 (SHA256) — 멱등성 재실행
[x] 프로그래밍 방식 프런트매터 — 결정론적
source,source_hash,model; Qwen은 5개 섹션만 작성[x] 심층 방어 검증: 펜스 제거, 빈 소스 건너뛰기(<10자), 섹션 존재/순서, 유효하지 않을 시 재시도
[x] CLAUDE.md 규칙 + 이 README의 PostToolUse 훅 스니펫
3단계 — VERIFIER 루프 ✓
도그푸딩 결과 로컬 모델이 텍스트 변환에서 표류하는 현상이 발견되었습니다. 검증기는 Claude에게 도달하기 전에 변경 없음, 길이 위반, 스키마 누락을 결정론적으로 포착합니다.
[x]
detect_noop— 공백 정규화된 동일성 검사 (codebrain_polish내 자동 재시도)[x]
check_word_count(min_words, max_words)— 경계 윈도우 게이트[x]
check_regex_schema(pattern)— 구조화된 출력 검사[x]
codebrain_generate_verified(prompt, min_words, max_words, must_match, max_retries)— 강화된 재시도 지침이 포함된 루프, 재시도 후에도 검증 실패 시[codebrain warning] ...반환
4단계 — 합의 디코딩 ✓
[x]
codebrain_consensus_generate(prompt, n)— N개의 후보 생성([2,5]로 제한), Qwen이 최상의 결과를 선택. N+1 추론 호출, 분산이 큰 작업의 품질 향상.다중 패스 skeleton→logic→edges→polish: 보류 (측정된 가치가 낮음; 개별 도구로 이미 구성 가능).
5단계 — RAG (보류 — 병목 현상 아님)
브레인 파일이 이미 인덱스 역할을 합니다. 파일 간 RAG는 향후 인덱싱이 병목 현상임이 입증될 때만 의미가 있습니다. 현재는 그런 신호가 없어 구축하지 않았습니다.
라이선스
MIT — LICENSE 참조.
Available Tools
10 toolscodebrain_batch_generateA
Run several generation prompts in sequence and return all results.
One shared system prompt applies to every item. Prompts are processed
serially (Ollama serialises on a single GPU anyway). A failure on one
prompt is captured inline as [codebrain error] ... at that index, so
the whole batch never aborts.
Returns a single string with per-item delimiters:
--- [0] ---
<result for prompts[0]>
--- [1] ---
<result for prompts[1]>Args:
prompts: List of prompts to run with the same system message.
system: Optional shared system message.
use_brain: If true, prepend .brain/context.md from cwd to the system prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| prompts | Yes | ||
| system | No | ||
| use_brain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavioral traits: serial processing, inline error handling without aborting, shared system prompt, effect of use_brain parameter, and the exact output format with delimiters. This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (~150 words), front-loaded with the purpose, and well-structured with bullet points and an example of the output. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (batch processing, error handling, output format), the description covers all necessary aspects: parameters, behavior, failure mode, and return structure. There are no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does so effectively: prompts as list of strings, system as optional shared message, and use_brain as flag to prepend a context file. This adds significant meaning beyond the schema's minimal metadata.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: running several generation prompts in sequence and returning all results. It effectively distinguishes itself from siblings by emphasizing batch processing and serial execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the shared system prompt and serial processing but lacks explicit guidance on when to use this tool versus alternatives like codebrain_generate (single) or codebrain_consensus_generate. It implies usage scenarios but does not state when-not-to-use or name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_consensus_generateA
Generate N candidates, let Qwen pick the best, return the winner.
Runs prompt N times (serial — Ollama serialises on single GPU anyway),
then does one additional call where Qwen is shown all candidates and
asked to return the best one verbatim. Useful for high-variance tasks
where a single shot drifts but majority-vote style sampling tightens
quality at the cost of N+1 inference calls.
Args:
prompt: The task description or content request.
system: Optional system message to steer tone / format / constraints.
n: Number of candidates to generate (default 3, clamped to [2, 5]).
use_brain: If true, prepend .brain/context.md to the system prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| system | No | ||
| n | No | ||
| use_brain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: serial execution, N+1 calls, Qwen selecting the best, clamping of n to [2,5], and use_brain prepending context. It does not cover error handling, but the core behavioral traits are clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary sentence, explanation, and Args block. It is slightly verbose but every sentence adds value. It earns a 4 for being clear and organized without excess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown), the description does not need to detail return values. It covers the process, parameter usage, and typical use case. The description provides sufficient context for the tool's operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description includes an Args section explaining each parameter: prompt (required), system (optional steering), n (default and clamping), and use_brain (context prepending). This adds full meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates N candidates and lets Qwen pick the best, returning the winner. It distinguishes itself from single-shot generation by noting it is for high-variance tasks, making the purpose specific and distinct from siblings like codebrain_generate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool for high-variance tasks where a single shot drifts, and mentions the cost of N+1 inference calls. While it does not list all alternatives, it provides clear context for when to use it, earning a high score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_explainA
Ask the local model to explain a snippet of code (read-only, no generation).
Useful for getting quick, token-free explanations without consuming Claude's context budget on understanding-only tasks.
Args: code: The code snippet to explain. question: The specific question to answer about the code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| question | No | What does this do? |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses 'read-only, no generation' and mentions 'local model', but lacks details on failure modes, required permissions, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences plus an Args block. Every line adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, output schema exists), the description covers purpose and usage adequately. Parameter details are minimal but sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It provides basic descriptions for 'code' and 'question', but lacks format, constraints, or examples, so it adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'explain a snippet of code' and distinguishes from siblings with 'read-only, no generation', directly contrasting with the generation tools like codebrain_generate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates when to use: 'for getting quick, token-free explanations without consuming Claude’s context budget on understanding-only tasks.' It implies alternatives by stating 'no generation', but does not explicitly name siblings or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_generateA
Delegate a generation task to the local Qwen-Coder model via Ollama.
Use this for bulk or routine work where a 14B local model is good enough: generating event templates, headlines, company descriptions, UI polish drafts, boilerplate, or repetitive transformations. The response is returned as raw text — review before applying.
Args:
prompt: The task description or content request.
system: Optional system message to steer tone / format / constraints.
use_brain: If true, prepend .brain/context.md from cwd to the system prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| system | No | ||
| use_brain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that the response is raw text and advises reviewing before applying. It also explains the optional system message and use_brain flag, offering good insight into tool behavior without omissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (approx. 100 words), front-loaded with purpose, and structured as a brief intro followed by parameter explanations. Every sentence adds value without redundancy, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema (though not shown), the description covers the core aspects: what it does, when to use it, parameters, and output nature. It omits potential limitations (e.g., model capabilities) but is generally sufficient for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, so the description must compensate. It explains the 'prompt' as task description, 'system' as steering message, and 'use_brain' as prepending context. This adds essential meaning beyond the schema's bare titles, though it could include format hints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool delegates a generation task to a local Qwen-Coder model via Ollama, providing specific use cases. It distinguishes the tool's role for bulk or routine work, but does not explicitly differentiate from siblings like codebrain_batch_generate or codebrain_generate_verified, which limits clarity of its niche.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context for when to use the tool ('bulk or routine work where a 14B local model is good enough') and lists example tasks. However, it does not specify when not to use it or mention alternative sibling tools, leaving the agent without explicit decision boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_generate_verifiedA
Generate with verifier loop — enforces word limits and regex schemas.
Runs codebrain_generate, then checks the output against the requested
constraints. On failure, retries with a tightened instruction that
names the specific problem. Gives up after max_retries attempts and
returns the last output with a [codebrain warning] ... prefix.
Args:
prompt: The task description or content request.
system: Optional system message to steer tone / format / constraints.
min_words: Minimum output word count (None = unbounded).
max_words: Maximum output word count (None = unbounded).
must_match: Regex pattern the output must match (re.search semantics).
max_retries: Max retry attempts on verification failure (default 2).
use_brain: If true, prepend .brain/context.md to the system prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| system | No | ||
| min_words | No | ||
| max_words | No | ||
| must_match | No | ||
| max_retries | No | ||
| use_brain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears full responsibility. It details retry behavior, warning prefix, and parameter effects. It lacks mention of side effects, permissions, or rate limits, but for a generation tool this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a one-line summary followed by a well-organized bullet list of parameters. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, no annotations), the description thoroughly explains behavior (verification loop, retries, warning) and all parameters. Output schema existence doesn't weaken completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description provides a detailed Args list explaining each parameter's meaning and defaults, adding significant value beyond the schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates with a verifier loop, enforcing word limits and regex schemas. It distinguishes from sibling tools like codebrain_generate by introducing verification and retry logic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the tool's use case: constrained generation with automatic retry on failure. While it doesn't explicitly state when not to use or mention alternatives, the purpose is clear and the description provides context for when to apply verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_initA
Seed .brain/context.md for a repo — one-time setup before scanning.
Detects the stack (python / js / ts / rust / go / java) from marker
files, counts source-file extensions, asks Qwen for a short overview,
and writes .brain/context.md with a pre-populated template. The user
is expected to edit the ## Notes for Claude section afterwards.
Idempotent: existing context.md is not overwritten unless force=True.
Args:
root: Directory to initialise.
force: If true, overwrite an existing .brain/context.md.
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | ||
| force | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: stack detection, source file counting, LLM query, template writing, and idempotency (force flag). It also notes the expected user edit. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, well-structured paragraph. First sentence states core purpose, followed by step details and idempotency note. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's actions (detection, counting, writing) and side effects (context.md creation). Idempotency and user editing are noted. Absence of return value explanation is minor given the side effect focus.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to both parameters: 'root' as the directory to initialize and 'force' enabling overwrite. Despite 0% schema coverage, it compensates well by explaining effects, though it could explicitly state defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Seed .brain/context.md for a repo — one-time setup before scanning.' It specifies the verb (seed), the resource (context.md), and context (one-time setup), distinguishing it from sibling scanning tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description indicates it's a one-time setup before scanning and advises user to edit the '## Notes for Claude' section afterward. It does not explicitly list when not to use it, but the context of sibling tools implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_polishA
Apply a targeted transform to existing text — do not regenerate from scratch.
Use this when you have a draft and want it tightened, shortened, rephrased, made more formal, translated, or similar. The system prompt forces the model into transform-mode: it must preserve meaning and structure and only apply the requested change.
Args:
text: The existing text to polish.
instructions: What transformation to apply (e.g. "shorten to 2 lines",
"make tone more formal", "translate to German").
use_brain: If true, prepend .brain/context.md from cwd to the system prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| instructions | Yes | ||
| use_brain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description effectively explains the transform-mode: preserve meaning and structure, only apply requested change. Also describes the use_brain parameter effect. No mention of destructive or auth details, but adequate for a non-destructive transform.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two paragraphs plus Args section, concise and clearly structured. The Args section is somewhat redundant with schema titles but adds context. Could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity and presence of output schema, description covers core behavior adequately. Does not address errors or edge cases, but sufficient for a simple transform tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds detailed parameter explanations in Args section, including examples for instructions and behavior for use_brain. This compensates well for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool applies a targeted transform to existing text, not generating from scratch, with specific examples (tighten, shorten, rephrase, formal, translate). This distinguishes it from sibling generation tools like codebrain_generate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use ('when you have a draft and want it...') and implies not for generation. However, it does not explicitly exclude alternatives or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_scan_fileA
Generate or refresh the <path>.brain summary file for a source file.
Reads the source at path, computes its SHA256, and compares to the
existing .brain file's source_hash frontmatter. If they match and
force is false, generation is skipped. Otherwise Qwen produces a new
brain file (Purpose / Key exports / Collaborators / Gotchas /
Conventions), the output is validated against the format spec, and on
validation failure one retry with a sharper instruction is attempted
before giving up. No partial or broken brain files are ever written.
Format spec: .spec/brain-file-format.md.
Args: path: Path to the source file to summarise. force: If true, regenerate even when the hash matches.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| force | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses the tool's behavior: reads source, computes SHA256, compares with existing .brain file, conditionally skips or regenerates using Qwen, validates output against a spec, performs one retry on validation failure, and guarantees no partial writes. This is thorough and honest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a brief summary sentence, followed by a detailed step-by-step explanation, reference to a format spec, and finally an Args section. Every sentence adds value, and the length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has an output schema (not shown), the description covers the major aspects: input parameters, core logic, validation, retry, and write safety. However, it does not address error scenarios such as file not found or permission issues, which would be helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only titles and types (0% coverage), so the description carries the full burden. It clearly explains 'path' as the source file to summarise and 'force' as a flag to force regeneration even when hash matches. Both parameters are well-described, adding essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates or refreshes a .brain summary file for a single source file. The verb 'scan' and the process described (hash comparison, validation) differentiate it from siblings like codebrain_scan_repo (which likely scans entire repos), but it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for individual files (via the 'path' argument and talk of source files), but it provides no explicit guidance on when to use this tool versus siblings like codebrain_batch_generate or codebrain_scan_repo. The conditions under which regeneration is skipped are explained, but alternatives are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_scan_repoA
Scan every source file under root and generate/refresh its .brain file.
Walks the directory tree, filters by file extension, prunes excluded
directories, and runs codebrain_scan_file on each match. Hash-gated:
unchanged files skip the model call. Per-file failures do not abort the
batch — they are reported at the end.
Defaults:
extensions: .py .js .ts .tsx .jsx .java .go .rs
exclude_dirs: .git .venv venv node_modules pycache dist build target
Args: root: Directory to scan recursively. force: If true, regenerate every brain file even when source hash matches. extensions: Override default source extensions (e.g. [".py", ".rb"]). exclude_dirs: Override default directory-name exclusion list.
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | ||
| force | No | ||
| extensions | No | ||
| exclude_dirs | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: directory walk, filtering, pruning, hash-gating, failure handling. No annotations exist, so description carries the burden; it does so well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet informative: core purpose first, then behavioral details, defaults, and parameter list. No unnecessary verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers overall process, defaults, error handling. Lacks detailed return value explanation but output schema exists. Sufficient for understanding tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, but the 'Args' section in the description explains each parameter (root, force, extensions, exclude_dirs), adding value where the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (scan and generate/refresh .brain files) and resource (source files under root). Distinguishes from siblings like codebrain_scan_file (single file) by specifying batch processing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on behavior (hash-gated, per-file failures non-aborting) and defaults. Does not explicitly compare to siblings like codebrain_batch_generate, but the batch scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codebrain_statusA
Report which Ollama models are available locally.
Call this to verify the local backend is reachable and discover which models the user has pulled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description indicates a read-only check (report models, verify backend). Does not mention side effects or permissions, but the simple nature of the tool makes this sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, 24 words total. Every word adds value. Front-loaded with action ('Report...') followed by usage advice. No wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless status tool with an output schema, the description provides the essential purpose and usage context. It is complete enough for an agent to decide when to call it among siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in input schema, so description does not need to add parameter info. Schema coverage is 100% (empty). Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it reports locally available Ollama models and can verify backend reachability. Differentiates from sibling tools like codebrain_generate (which generate responses) and codebrain_init (which sets up context).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to call this to verify backend reachability and discover pulled models. Provides clear context for when to use it, though no mention of when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
codebrain_batch_generate - First observed
codebrain_consensus_generate - First observed
codebrain_explain - First observed
codebrain_generate - First observed
codebrain_generate_verified - First observed
codebrain_init - First observed
codebrain_polish - First observed
codebrain_scan_file - First observed
codebrain_scan_repo - First observed
codebrain_status
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose: batch generation, consensus generation, explanation, single generation, verified generation, initialization, polishing, file scanning, repo scanning, and status. While some involve generation, they differ in process (e.g., batch vs consensus) or constraints, and descriptions make them easy to differentiate.
All tool names follow the consistent pattern 'codebrain_verb_noun' in snake_case (e.g., codebrain_batch_generate, codebrain_scan_file). The verb is always present and descriptive, with no mixing of conventions.
With 10 tools, the server is well-scoped for its purpose of local AI code assistance. Each tool earns its place, covering core operations like generation, verification, file analysis, and setup without unnecessary bloat.
The tool set covers the full lifecycle for the domain: setup (init), generation (generate, batch, consensus, verified), analysis (explain, scan_file, scan_repo), and polishing. A minor gap is the lack of a tool to delete or clear generated brain files, but this is not essential for the core workflow.
Maintenance
Related MCP Connectors
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
No-data MCP handoff for local Claude Code to Codex harness moves. $49 lifetime.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that lets Claude Code delegate mechanical tasks to a local LLM for summarization, classification, extraction, and drafting.13 npm13MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that lets Claude Code offload simple tasks like code explanation, writing tests, and adding comments to a local Ollama model, saving Claude API tokens.-
- AlicenseNot gradedqualityBmaintenanceA local MCP server that delegates coding tasks to local Qwen and cloud Gemini models, enabling orchestrators like Claude Code to offload routine code generation and receive verified results with automatic correction logging.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that allows Claude Code to offload mechanical tasks such as summarization, classification, and drafting to a local LLM, reducing API costs while keeping Claude in control of complex reasoning and quality review.13 npmMIT