{ "$schema": "https://focus-mcp.github.io/marketplace/schemas/catalog/v1.json", "name": "FocusMCP Marketplace", "description": "Catalogue officiel des briques MCP FocusMCP.", "owner": { "name": "FocusMCP contributors", "url": "https://github.com/focus-mcp", "email": "contact@focusmcp.dev" }, "updated": "2026-04-27T11:33:49.687Z", "bricks": [ { "name": "agent", "version": "1.1.0", "description": "Agent registry — register AI agents with capabilities, list available agents, query capabilities.", "tags": [ "agent", "registry", "capabilities", "ai" ], "dependencies": [], "tools": [ { "name": "register", "description": "Register an agent with name, capabilities list, and optional metadata.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Human-readable name of the agent" }, "capabilities": { "type": "array", "items": { "type": "string" }, "description": "List of capability identifiers the agent can handle" }, "metadata": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Optional key-value metadata about the agent" } }, "required": [ "name", "capabilities" ], "additionalProperties": false } }, { "name": "unregister", "description": "Remove an agent from the registry by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique identifier of the agent to remove" } }, "required": [ "id" ], "additionalProperties": false } }, { "name": "list", "description": "List all registered agents, optionally filtered by capability.", "inputSchema": { "type": "object", "properties": { "capability": { "type": "string", "description": "Filter agents by this capability (optional)" } }, "additionalProperties": false } }, { "name": "capabilities", "description": "Query which agents can handle a specific capability/task type.", "inputSchema": { "type": "object", "properties": { "capability": { "type": "string", "description": "Capability identifier to query" } }, "required": [ "capability" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-agent" }, "license": "MIT" }, { "name": "aiteam", "version": "1.1.0", "description": "AI team coordination — loads dispatch, parallel, debate, review, agent for multi-agent orchestration.", "tags": [ "aiteam", "composite", "orchestration", "multi-agent" ], "dependencies": [ "dispatch", "parallel", "debate", "review", "agent" ], "tools": [], "source": { "type": "npm", "package": "@focus-mcp/brick-aiteam" }, "license": "MIT" }, { "name": "autopilot", "version": "1.1.0", "description": "Autopilot workflow — autonomous task execution with reasoning, context management, and shell commands.", "tags": [ "autopilot", "workflow", "autonomous", "planning" ], "dependencies": [ "codebase", "smartcontext", "devtools", "thinking" ], "tools": [ { "name": "plan", "description": "Create an execution plan for a task — break it into steps with reasoning.", "inputSchema": { "type": "object", "properties": { "task": { "type": "string", "description": "Task description" }, "dir": { "type": "string", "description": "Project root directory" } }, "required": [ "task" ], "additionalProperties": false } }, { "name": "execute", "description": "Execute a plan step by step with reasoning at each stage.", "inputSchema": { "type": "object", "properties": { "planId": { "type": "string", "description": "Plan ID from auto_plan" }, "step": { "type": "number", "description": "Step to execute (default: next pending)" } }, "required": [ "planId" ], "additionalProperties": false } }, { "name": "status", "description": "Get autopilot status — current plan, completed steps, next step.", "inputSchema": { "type": "object", "properties": { "planId": { "type": "string", "description": "Plan ID" } }, "required": [ "planId" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-autopilot" }, "license": "MIT" }, { "name": "batch", "version": "1.1.0", "description": "Batch execution patterns — run multiple operations sequentially, in parallel, or as a pipeline.", "tags": [ "batch", "execution", "parallel", "sequential", "pipeline", "devtools" ], "dependencies": [], "tools": [ { "name": "multi", "description": "Execute multiple shell commands and collect all results. Each command runs independently.", "inputSchema": { "type": "object", "properties": { "commands": { "type": "array", "items": { "type": "string" }, "description": "List of shell commands" }, "cwd": { "type": "string", "description": "Working directory for all commands" }, "timeout": { "type": "number", "description": "Per-command timeout in ms (default 30000)" } }, "required": [ "commands" ], "additionalProperties": false } }, { "name": "sequential", "description": "Execute commands one by one. Stops on first failure unless continueOnError is set.", "inputSchema": { "type": "object", "properties": { "commands": { "type": "array", "items": { "type": "string" }, "description": "Commands to run in order" }, "cwd": { "type": "string", "description": "Working directory" }, "timeout": { "type": "number", "description": "Per-command timeout in ms (default 30000)" }, "continueOnError": { "type": "boolean", "description": "Continue after failure (default false)" } }, "required": [ "commands" ], "additionalProperties": false } }, { "name": "parallel", "description": "Execute all commands in parallel. Returns when all complete.", "inputSchema": { "type": "object", "properties": { "commands": { "type": "array", "items": { "type": "string" }, "description": "Commands to run in parallel" }, "cwd": { "type": "string", "description": "Working directory" }, "timeout": { "type": "number", "description": "Per-command timeout in ms (default 30000)" }, "maxConcurrency": { "type": "number", "description": "Max parallel commands (default: unlimited)" } }, "required": [ "commands" ], "additionalProperties": false } }, { "name": "pipeline", "description": "Pipe stdout of each command into stdin of the next (shell pipe chain).", "inputSchema": { "type": "object", "properties": { "commands": { "type": "array", "items": { "type": "string" }, "description": "Commands to pipe together" }, "cwd": { "type": "string", "description": "Working directory" }, "timeout": { "type": "number", "description": "Total pipeline timeout in ms (default 30000)" } }, "required": [ "commands" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-batch" }, "license": "MIT" }, { "name": "cache", "version": "1.1.1", "description": "In-memory file cache — avoid redundant disk reads with mtime-based invalidation.", "tags": [ "cache", "performance", "io" ], "dependencies": [], "tools": [ { "name": "get", "description": "Get a file from cache. Returns content + hit/miss status.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute file path" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "set", "description": "Force a file into the cache with given content.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute file path" }, "content": { "type": "string", "description": "File content to cache" } }, "required": [ "path", "content" ], "additionalProperties": false } }, { "name": "invalidate", "description": "Invalidate one file or the entire cache (omit path to clear all).", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path to invalidate; omit to clear all" } }, "additionalProperties": false } }, { "name": "warmup", "description": "Pre-load a list of files into the cache.", "inputSchema": { "type": "object", "properties": { "paths": { "type": "array", "items": { "type": "string" }, "description": "List of absolute file paths to cache" } }, "required": [ "paths" ], "additionalProperties": false } }, { "name": "stats", "description": "Return cache metrics: entry count, total size, hit rate.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-cache" }, "license": "MIT" }, { "name": "callgraph", "version": "1.1.1", "description": "Call graph analysis — callers, callees, call chains.", "tags": [ "callgraph", "code-intel", "analysis" ], "dependencies": [], "tools": [ { "name": "callers", "description": "Find which functions call this function (grep usage in files).", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Function name to find callers for" }, "dir": { "type": "string", "description": "Directory to search in" } }, "required": [ "name", "dir" ], "additionalProperties": false } }, { "name": "callees", "description": "Find which functions this function calls.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Function name" }, "file": { "type": "string", "description": "File containing the function" }, "startLine": { "type": "number", "description": "Start line of function body" }, "endLine": { "type": "number", "description": "End line of function body" } }, "required": [ "name", "file", "startLine", "endLine" ], "additionalProperties": false } }, { "name": "chain", "description": "Find the call chain from function A to function Z.", "inputSchema": { "type": "object", "properties": { "from": { "type": "string", "description": "Start function name" }, "to": { "type": "string", "description": "End function name" }, "dir": { "type": "string", "description": "Directory to search in" }, "maxDepth": { "type": "number", "description": "Maximum search depth (default 5)" } }, "required": [ "from", "to", "dir" ], "additionalProperties": false } }, { "name": "depth", "description": "Find the maximum call depth of a function.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Function name" }, "dir": { "type": "string", "description": "Directory to search in" }, "maxDepth": { "type": "number", "description": "Maximum depth to explore (default 5)" } }, "required": [ "name", "dir" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-callgraph" }, "license": "MIT" }, { "name": "codebase", "version": "1.1.0", "description": "Complete codebase intelligence — loads treesitter, symbol, outline, callgraph, depgraph, refs.", "tags": [ "codebase", "composite", "code-intelligence" ], "dependencies": [ "treesitter", "symbol", "outline", "callgraph", "depgraph", "refs" ], "tools": [], "source": { "type": "npm", "package": "@focus-mcp/brick-codebase" }, "license": "MIT" }, { "name": "codeedit", "version": "1.2.0", "description": "Precise code editing — replace function bodies, insert before/after, safe delete with dependency check.", "tags": [ "edit", "code", "refactoring", "insert", "delete", "codemod" ], "dependencies": [], "tools": [ { "name": "replacebody", "description": "Replace the body of a function or method by name. Uses AST parsing for PHP; brace-matching for TS/JS/Python/Go/Rust/Java. Returns found=false with error if language is unsupported.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path" }, "name": { "type": "string", "description": "Function or method name" }, "newBody": { "type": "string", "description": "New function body content (without braces)" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" }, "dryRun": { "type": "boolean", "description": "When true, return preview only — never write to disk" } }, "required": [ "path", "name", "newBody" ], "additionalProperties": false } }, { "name": "insertafter", "description": "Insert code after a specific line number or after a pattern match. If the pattern matches multiple lines, returns inserted=false with a matches list; disambiguate via lineHint.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path" }, "after": { "type": "number", "description": "Line number to insert after (1-based)" }, "pattern": { "type": "string", "description": "Regex pattern to insert after (alternative to line number)" }, "lineHint": { "type": "number", "description": "Preferred line number when pattern has multiple matches — picks the closest match" }, "content": { "type": "string", "description": "Content to insert" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" }, "dryRun": { "type": "boolean", "description": "When true, return diff only — never write to disk" } }, "required": [ "path", "content" ], "additionalProperties": false } }, { "name": "insertbefore", "description": "Insert code before a specific line number or before a pattern match. If the pattern matches multiple lines, returns inserted=false with a matches list; disambiguate via lineHint.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path" }, "before": { "type": "number", "description": "Line number to insert before (1-based)" }, "pattern": { "type": "string", "description": "Regex pattern to insert before" }, "lineHint": { "type": "number", "description": "Preferred line number when pattern has multiple matches — picks the closest match" }, "content": { "type": "string", "description": "Content to insert" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" }, "dryRun": { "type": "boolean", "description": "When true, return diff only — never write to disk" } }, "required": [ "path", "content" ], "additionalProperties": false } }, { "name": "safedelete", "description": "Delete a function or export, checking first if anything depends on it. Refuses if dependents exist.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path" }, "name": { "type": "string", "description": "Function/export name to delete" }, "dir": { "type": "string", "description": "Project root to check for dependents" }, "force": { "type": "boolean", "description": "Delete even if dependents exist (default false)" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" }, "dryRun": { "type": "boolean", "description": "When true, return diff only — never write to disk" } }, "required": [ "path", "name" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-codeedit" }, "license": "MIT" }, { "name": "codemod", "version": "1.1.0", "description": "Code modification toolkit — loads symbol, rename, codeedit, inline, textsearch for automated refactoring.", "tags": [ "codemod", "composite", "refactoring" ], "dependencies": [ "symbol", "rename", "codeedit", "inline", "textsearch" ], "tools": [], "source": { "type": "npm", "package": "@focus-mcp/brick-codemod" }, "license": "MIT" }, { "name": "compress", "version": "1.1.0", "description": "Compress text output to save tokens — strip comments, collapse whitespace, abbreviate patterns.", "tags": [ "compress", "tokens", "output", "json" ], "dependencies": [], "tools": [ { "name": "output", "description": "Strip comments, collapse whitespace, remove blank lines from code or text.", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "Text to compress" }, "level": { "type": "string", "enum": [ "light", "medium", "aggressive" ], "description": "Compression level (default: medium)" } }, "required": [ "text" ], "additionalProperties": false } }, { "name": "response", "description": "Compress a JSON tool response: strip null/undefined values, shorten paths, abbreviate keys.", "inputSchema": { "type": "object", "properties": { "json": { "type": "string", "description": "JSON string to compress" } }, "required": [ "json" ], "additionalProperties": false } }, { "name": "terse", "description": "Ultra-compressed: keep ONLY identifiers, function names, type names. Strip all implementation.", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "Source text to make terse" } }, "required": [ "text" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-compress" }, "license": "MIT" }, { "name": "contextpack", "version": "1.1.0", "description": "Pack files into a compressed context bundle — reduce token usage by extracting only signatures, maps, or full content.", "tags": [ "context", "pack", "tokens", "compression" ], "dependencies": [], "tools": [ { "name": "pack", "description": "Pack multiple files into a single context string.", "inputSchema": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "string" }, "description": "List of file paths to pack" }, "mode": { "type": "string", "enum": [ "signatures", "map", "full" ], "description": "Pack mode: signatures (exports only), map (key lines), full (entire file). Default: signatures" } }, "required": [ "files" ], "additionalProperties": false } }, { "name": "budget", "description": "Given a token budget, pack as many files as possible.", "inputSchema": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "string" }, "description": "List of file paths" }, "budget": { "type": "number", "description": "Token budget" } }, "required": [ "files", "budget" ], "additionalProperties": false } }, { "name": "estimate", "description": "Estimate pack size without actually packing.", "inputSchema": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "string" }, "description": "List of file paths" }, "mode": { "type": "string", "enum": [ "signatures", "map", "full" ], "description": "Pack mode (default: signatures)" } }, "required": [ "files" ], "additionalProperties": false } }, { "name": "prioritize", "description": "Sort files by relevance to a query.", "inputSchema": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "string" }, "description": "List of file paths" }, "query": { "type": "string", "description": "Relevance query" } }, "required": [ "files", "query" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-contextpack" }, "license": "MIT" }, { "name": "convert", "version": "1.2.0", "description": "Convert between formats and units — unit conversion, encoding, format transformation, naming conventions.", "tags": [ "convert", "units", "encoding", "format", "naming" ], "dependencies": [], "tools": [ { "name": "units", "description": "Convert between units: bytes (B/KB/MB/GB), time (ms/s/m/h), or tokens with cost estimate.", "inputSchema": { "type": "object", "properties": { "value": { "type": "number", "description": "The numeric value to convert" }, "from": { "type": "string", "description": "Source unit: b, kb, mb, gb, ms, s, m, h, tokens" }, "to": { "type": "string", "description": "Target unit: b, kb, mb, gb, ms, s, m, h, tokens, cost" }, "pricePerMillion": { "type": "number", "description": "Token price per 1M tokens in USD (required when converting tokens→cost)" } }, "required": [ "value", "from", "to" ], "additionalProperties": false } }, { "name": "encoding", "description": "Encode or decode text using base64, hex, URL encoding, or HTML entities.", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "The text to encode or decode" }, "operation": { "type": "string", "enum": [ "base64encode", "base64decode", "hexencode", "hexdecode", "urlencode", "urldecode", "htmlescape", "htmlunescape" ], "description": "The encoding operation to perform" } }, "required": [ "text", "operation" ], "additionalProperties": false } }, { "name": "format", "description": "Convert data between formats: JSON, CSV, and YAML.", "inputSchema": { "type": "object", "properties": { "data": { "type": "string", "description": "The input data string to convert" }, "from": { "type": "string", "enum": [ "json", "csv" ], "description": "Source format" }, "to": { "type": "string", "enum": [ "json", "csv", "yaml" ], "description": "Target format" } }, "required": [ "data", "from", "to" ], "additionalProperties": false } }, { "name": "language", "description": "Convert naming conventions between camelCase, snake_case, kebab-case, and PascalCase.", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "The identifier to convert" }, "to": { "type": "string", "enum": [ "camel", "snake", "kebab", "pascal" ], "description": "Target naming convention" } }, "required": [ "text", "to" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-convert" }, "license": "MIT" }, { "name": "debate", "version": "1.1.0", "description": "Structured multi-perspective debate — define positions, score arguments, find consensus, summarize.", "tags": [ "debate", "consensus", "scoring", "analysis", "reasoning" ], "dependencies": [], "tools": [ { "name": "debate", "description": "Start a debate with a topic and an array of positions (role + argument).", "inputSchema": { "type": "object", "properties": { "topic": { "type": "string", "description": "The debate topic or question" }, "positions": { "type": "array", "items": { "type": "object", "properties": { "role": { "type": "string", "description": "Name or role of the debater" }, "argument": { "type": "string", "description": "The debater's argument" } }, "required": [ "role", "argument" ], "additionalProperties": false }, "minItems": 2, "description": "List of positions (minimum 2)" } }, "required": [ "topic", "positions" ], "additionalProperties": false } }, { "name": "consensus", "description": "Find common ground between positions in a debate by extracting overlapping keywords and themes.", "inputSchema": { "type": "object", "properties": { "debateId": { "type": "string", "description": "ID of the debate to analyze" } }, "required": [ "debateId" ], "additionalProperties": false } }, { "name": "score", "description": "Score each position on criteria (relevance, evidence, feasibility) from 1 to 10 and compute a weighted ranking.", "inputSchema": { "type": "object", "properties": { "debateId": { "type": "string", "description": "ID of the debate to score" }, "scores": { "type": "array", "items": { "type": "object", "properties": { "role": { "type": "string", "description": "Role being scored" }, "relevance": { "type": "number", "description": "Relevance score 1-10" }, "evidence": { "type": "number", "description": "Evidence quality score 1-10" }, "feasibility": { "type": "number", "description": "Feasibility score 1-10" } }, "required": [ "role", "relevance", "evidence", "feasibility" ], "additionalProperties": false }, "description": "Criteria scores per position" } }, "required": [ "debateId", "scores" ], "additionalProperties": false } }, { "name": "summary", "description": "Summarize the debate with winner, key points, and areas of agreement and disagreement.", "inputSchema": { "type": "object", "properties": { "debateId": { "type": "string", "description": "ID of the debate to summarize" } }, "required": [ "debateId" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-debate" }, "license": "MIT" }, { "name": "decision", "version": "1.1.0", "description": "Structured decision-making — define options, analyze tradeoffs, recommend, and record decisions.", "tags": [ "decision", "tradeoff", "analysis", "recommendation", "adr" ], "dependencies": [], "tools": [ { "name": "options", "description": "Define options for a decision. Each option has a label and optional pros/cons.", "inputSchema": { "type": "object", "properties": { "question": { "type": "string", "description": "The decision question" }, "options": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "pros": { "type": "array", "items": { "type": "string" } }, "cons": { "type": "array", "items": { "type": "string" } } }, "required": [ "label" ] }, "description": "Available options" } }, "required": [ "question", "options" ], "additionalProperties": false } }, { "name": "tradeoffs", "description": "Add criteria and weights to evaluate options. Score each option against criteria.", "inputSchema": { "type": "object", "properties": { "decisionId": { "type": "string", "description": "Decision ID" }, "criteria": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "weight": { "type": "number", "description": "Weight 1-10" } }, "required": [ "name", "weight" ] }, "description": "Evaluation criteria" }, "scores": { "type": "array", "items": { "type": "object", "properties": { "option": { "type": "string" }, "scores": { "type": "array", "items": { "type": "number" }, "description": "Score per criterion (1-10)" } }, "required": [ "option", "scores" ] }, "description": "Scores per option" } }, "required": [ "decisionId", "criteria", "scores" ], "additionalProperties": false } }, { "name": "recommend", "description": "Get a recommendation based on weighted scores.", "inputSchema": { "type": "object", "properties": { "decisionId": { "type": "string", "description": "Decision ID" } }, "required": [ "decisionId" ], "additionalProperties": false } }, { "name": "record", "description": "Record the final decision with rationale. Persists to a JSON file.", "inputSchema": { "type": "object", "properties": { "decisionId": { "type": "string", "description": "Decision ID" }, "chosen": { "type": "string", "description": "The chosen option label" }, "rationale": { "type": "string", "description": "Why this option was chosen" }, "outputPath": { "type": "string", "description": "File path to save the decision record (optional)" } }, "required": [ "decisionId", "chosen", "rationale" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-decision" }, "license": "MIT" }, { "name": "depgraph", "version": "1.1.1", "description": "Dependency graph analysis — imports, exports, circular deps, fan-in/out.", "tags": [ "depgraph", "imports", "analysis", "circular" ], "dependencies": [], "tools": [ { "name": "imports", "description": "List all imports of a file.", "inputSchema": { "type": "object", "properties": { "file": { "type": "string", "description": "Absolute file path" } }, "required": [ "file" ], "additionalProperties": false } }, { "name": "exports", "description": "List all exports of a file.", "inputSchema": { "type": "object", "properties": { "file": { "type": "string", "description": "Absolute file path" } }, "required": [ "file" ], "additionalProperties": false } }, { "name": "circular", "description": "Detect circular dependencies in a directory.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Absolute directory path" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "fanin", "description": "Find which files import this file.", "inputSchema": { "type": "object", "properties": { "file": { "type": "string", "description": "Absolute file path" }, "dir": { "type": "string", "description": "Directory to search in" } }, "required": [ "file", "dir" ], "additionalProperties": false } }, { "name": "fanout", "description": "Count how many files this file imports.", "inputSchema": { "type": "object", "properties": { "file": { "type": "string", "description": "Absolute file path" } }, "required": [ "file" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-depgraph" }, "license": "MIT" }, { "name": "devtools", "version": "1.1.0", "description": "Developer tools — loads shell, sandbox, batch for command execution and scripting.", "tags": [ "devtools", "composite", "execution" ], "dependencies": [ "shell", "sandbox", "batch" ], "tools": [], "source": { "type": "npm", "package": "@focus-mcp/brick-devtools" }, "license": "MIT" }, { "name": "diagram", "version": "1.1.0", "description": "Diagram generation — produce Mermaid, DOT/Graphviz, and ASCII diagrams from data.", "tags": [ "diagram", "mermaid", "graphviz", "dot", "ascii", "visualization" ], "dependencies": [], "tools": [ { "name": "mermaid", "description": "Generate a Mermaid diagram from structured data (flowchart, sequence, class, or graph).", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Diagram type: flowchart, sequence, classDiagram, graph" }, "nodes": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "label": { "type": "string" } }, "required": [ "id" ] }, "description": "Nodes/participants" }, "edges": { "type": "array", "items": { "type": "object", "properties": { "from": { "type": "string" }, "to": { "type": "string" }, "label": { "type": "string" } }, "required": [ "from", "to" ] }, "description": "Connections between nodes" }, "direction": { "type": "string", "description": "Graph direction: TB, BT, LR, RL (default TB)" } }, "required": [ "type", "nodes", "edges" ], "additionalProperties": false } }, { "name": "dot", "description": "Generate a DOT/Graphviz diagram from structured data.", "inputSchema": { "type": "object", "properties": { "nodes": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "label": { "type": "string" }, "shape": { "type": "string" } }, "required": [ "id" ] }, "description": "Nodes" }, "edges": { "type": "array", "items": { "type": "object", "properties": { "from": { "type": "string" }, "to": { "type": "string" }, "label": { "type": "string" } }, "required": [ "from", "to" ] }, "description": "Edges" }, "directed": { "type": "boolean", "description": "Directed graph (default true)" } }, "required": [ "nodes", "edges" ], "additionalProperties": false } }, { "name": "ascii", "description": "Generate a simple ASCII box-and-arrow diagram from nodes and edges.", "inputSchema": { "type": "object", "properties": { "nodes": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "label": { "type": "string" } }, "required": [ "id" ] }, "description": "Nodes" }, "edges": { "type": "array", "items": { "type": "object", "properties": { "from": { "type": "string" }, "to": { "type": "string" }, "label": { "type": "string" } }, "required": [ "from", "to" ] }, "description": "Edges" } }, "required": [ "nodes", "edges" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-diagram" }, "license": "MIT" }, { "name": "dispatch", "version": "1.1.0", "description": "Task dispatch queue — send tasks, manage queue, cancel, check status for multi-step workflows.", "tags": [ "dispatch", "queue", "task", "orchestration", "workflow" ], "dependencies": [], "tools": [ { "name": "send", "description": "Send a task to the dispatch queue. Returns a task ID.", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Task type (e.g. 'review', 'build')" }, "payload": { "type": "object", "description": "Task payload data" }, "priority": { "type": "number", "description": "Priority 1-10 (default 5)" } }, "required": [ "type", "payload" ], "additionalProperties": false } }, { "name": "queue", "description": "List all tasks in the queue, optionally filtered by status.", "inputSchema": { "type": "object", "properties": { "status": { "type": "string", "description": "Filter: 'pending', 'running', 'done', 'cancelled', 'all' (default 'all')" } }, "additionalProperties": false } }, { "name": "cancel", "description": "Cancel a pending or running task by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Task ID" } }, "required": [ "id" ], "additionalProperties": false } }, { "name": "status", "description": "Get detailed status of a specific task.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Task ID" } }, "required": [ "id" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-dispatch" }, "license": "MIT" }, { "name": "echo", "version": "1.1.0", "description": "Hello-world brick — returns the message it receives. Serves as a smoke test for the FocusMCP pipeline.", "tags": [ "example", "smoke-test", "hello-world" ], "dependencies": [], "tools": [ { "name": "say", "description": "Returns the received message as-is. Useful as a canary to verify FocusMCP correctly dispatches tool calls end-to-end.", "inputSchema": { "type": "object", "properties": { "message": { "type": "string", "description": "Message to echo back" } }, "required": [ "message" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-echo" }, "license": "MIT" }, { "name": "filediff", "version": "1.1.0", "description": "File comparison — diff, patch, delta between files or versions.", "tags": [ "file", "diff", "patch" ], "dependencies": [], "tools": [ { "name": "diff", "description": "Compare two files and return unified diff", "inputSchema": { "type": "object", "properties": { "a": { "type": "string", "description": "Path to first file" }, "b": { "type": "string", "description": "Path to second file" } }, "required": [ "a", "b" ], "additionalProperties": false } }, { "name": "patch", "description": "Apply a unified diff patch to a file", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File to patch" }, "patch": { "type": "string", "description": "Unified diff content" } }, "required": [ "path", "patch" ], "additionalProperties": false } }, { "name": "delta", "description": "Show only changed lines between two strings (compact)", "inputSchema": { "type": "object", "properties": { "before": { "type": "string" }, "after": { "type": "string" } }, "required": [ "before", "after" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-filediff" }, "license": "MIT" }, { "name": "filelist", "version": "1.1.0", "description": "List directory contents — entries, tree, glob, find.", "tags": [ "file", "list", "directory" ], "dependencies": [], "tools": [ { "name": "list", "description": "List files and directories in a path", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute directory path" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "tree", "description": "Recursive directory tree", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" }, "depth": { "type": "number", "description": "Max depth (default unlimited)" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "glob", "description": "Find files matching a glob pattern", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" }, "pattern": { "type": "string", "description": "Glob pattern (e.g. *.ts)" } }, "required": [ "path", "pattern" ], "additionalProperties": false } }, { "name": "find", "description": "Find files by name (substring match)", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" }, "name": { "type": "string", "description": "Filename substring to match" } }, "required": [ "path", "name" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-filelist" }, "license": "MIT" }, { "name": "fileops", "version": "1.3.0", "description": "File operations — move, copy, delete, rename. Call fileops:setRoot first with the absolute path to your workspace, otherwise tools will fail-fast on the first non-existent path.", "tags": [ "file", "move", "copy", "delete" ], "dependencies": [], "tools": [ { "name": "move", "description": "Move a file or directory to a new path. Requires fileops:setRoot to be called first with the workspace root path.", "inputSchema": { "type": "object", "properties": { "from": { "type": "string", "description": "Source path" }, "to": { "type": "string", "description": "Destination path" } }, "required": [ "from", "to" ], "additionalProperties": false } }, { "name": "copy", "description": "Copy a file to a new path. Requires fileops:setRoot to be called first with the workspace root path.", "inputSchema": { "type": "object", "properties": { "from": { "type": "string" }, "to": { "type": "string" } }, "required": [ "from", "to" ], "additionalProperties": false } }, { "name": "delete", "description": "Delete a file or empty directory. Requires fileops:setRoot to be called first with the workspace root path.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute path to delete" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "rename", "description": "Rename a file within its parent directory. Requires fileops:setRoot to be called first with the workspace root path.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Current file path" }, "name": { "type": "string", "description": "New filename (not a full path)" } }, "required": [ "path", "name" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-fileops" }, "license": "MIT" }, { "name": "fileread", "version": "1.1.0", "description": "Read files — full, head, tail, line range, encoding detection.", "tags": [ "file", "read", "io" ], "dependencies": [], "tools": [ { "name": "read", "description": "Read entire file content", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute file path" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "head", "description": "Read first N lines of a file", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" }, "lines": { "type": "number", "description": "Number of lines (default 10)" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "tail", "description": "Read last N lines of a file", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" }, "lines": { "type": "number", "description": "Number of lines (default 10)" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "range", "description": "Read specific line range from a file", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" }, "from": { "type": "number", "description": "Start line (1-based)" }, "to": { "type": "number", "description": "End line (inclusive)" } }, "required": [ "path", "from", "to" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-fileread" }, "license": "MIT" }, { "name": "filesearch", "version": "1.1.0", "description": "Search and replace in files — regex search, in-place replace.", "tags": [ "file", "search", "replace", "regex" ], "dependencies": [], "tools": [ { "name": "search", "description": "Search for a regex pattern in files", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Directory to search in" }, "pattern": { "type": "string", "description": "Regex pattern" }, "glob": { "type": "string", "description": "File glob filter (e.g. *.ts)" } }, "required": [ "path", "pattern" ], "additionalProperties": false } }, { "name": "replace", "description": "Search and replace in a file", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path" }, "pattern": { "type": "string", "description": "Regex pattern to find" }, "replacement": { "type": "string", "description": "Replacement string" } }, "required": [ "path", "pattern", "replacement" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-filesearch" }, "license": "MIT" }, { "name": "filesystem", "version": "1.1.0", "description": "Complete filesystem operations — loads fileread, filewrite, filelist, fileops, filesearch.", "tags": [ "filesystem", "composite" ], "dependencies": [ "fileread", "filewrite", "filelist", "fileops", "filesearch" ], "tools": [], "source": { "type": "npm", "package": "@focus-mcp/brick-filesystem" }, "license": "MIT" }, { "name": "filewrite", "version": "1.2.0", "description": "Write files — create, overwrite, append.", "tags": [ "file", "write", "io" ], "dependencies": [], "tools": [ { "name": "write", "description": "Write content to a file (creates or overwrites)", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute file path" }, "content": { "type": "string", "description": "Content to write" } }, "required": [ "path", "content" ], "additionalProperties": false } }, { "name": "append", "description": "Append content to end of a file", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" }, "content": { "type": "string" } }, "required": [ "path", "content" ], "additionalProperties": false } }, { "name": "create", "description": "Create a new file. Fails if the file already exists by default (safe). Pass options.force=true to overwrite an existing file.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute file path" }, "content": { "type": "string", "description": "Content to write" }, "options": { "type": "object", "description": "Optional creation options", "properties": { "force": { "type": "boolean", "description": "If true, overwrite the file if it already exists. Default: false." } }, "additionalProperties": false } }, "required": [ "path", "content" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-filewrite" }, "license": "MIT" }, { "name": "format", "version": "1.1.0", "description": "Format data into various output formats — pretty JSON, YAML, markdown, ASCII tables.", "tags": [ "format", "json", "yaml", "markdown", "table", "output" ], "dependencies": [], "tools": [ { "name": "json", "description": "Format and pretty-print JSON with optional key sorting and field filtering.", "inputSchema": { "type": "object", "properties": { "data": { "type": "string", "description": "JSON string to format" }, "indent": { "type": "number", "description": "Number of spaces for indentation (default 2)" }, "sortKeys": { "type": "boolean", "description": "Whether to sort object keys alphabetically" } }, "required": [ "data" ], "additionalProperties": false } }, { "name": "yaml", "description": "Convert JSON data to YAML format.", "inputSchema": { "type": "object", "properties": { "data": { "type": "string", "description": "JSON string to convert to YAML" } }, "required": [ "data" ], "additionalProperties": false } }, { "name": "markdown", "description": "Convert structured JSON data to markdown (headings, lists, or table).", "inputSchema": { "type": "object", "properties": { "data": { "type": "string", "description": "JSON string to convert to markdown" }, "style": { "type": "string", "enum": [ "list", "table", "headings" ], "description": "Markdown style: list (default), table, or headings" } }, "required": [ "data" ], "additionalProperties": false } }, { "name": "table", "description": "Format tabular data as an ASCII table with +--+ borders and optional column alignment.", "inputSchema": { "type": "object", "properties": { "headers": { "type": "array", "items": { "type": "string" }, "description": "Column header labels" }, "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } }, "description": "Table rows as arrays of cell strings" }, "align": { "type": "array", "items": { "type": "string", "enum": [ "left", "right", "center" ] }, "description": "Per-column alignment (default: left)" } }, "required": [ "headers", "rows" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-format" }, "license": "MIT" }, { "name": "fts", "version": "1.1.0", "description": "Full-text search with TF-IDF ranking — index files, search with relevance scoring, suggest completions.", "tags": [ "search", "fulltext", "tfidf", "index", "ranking" ], "dependencies": [], "tools": [ { "name": "index", "description": "Index a directory for full-text search. Reads supported files and builds an inverted index.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Directory to index" }, "glob": { "type": "string", "description": "File glob filter (default: *.ts,*.js,*.md,*.json)" }, "maxFiles": { "type": "number", "description": "Max files to index (default 500)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "search", "description": "Search the index with a query. Returns ranked results with TF-IDF scores.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query (space-separated terms)" }, "limit": { "type": "number", "description": "Max results (default 10)" } }, "required": [ "query" ], "additionalProperties": false } }, { "name": "rank", "description": "Given a query and a list of file paths, rank them by relevance using the index.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query" }, "files": { "type": "array", "items": { "type": "string" }, "description": "File paths to rank" } }, "required": [ "query", "files" ], "additionalProperties": false } }, { "name": "suggest", "description": "Auto-complete a partial query using indexed terms.", "inputSchema": { "type": "object", "properties": { "prefix": { "type": "string", "description": "Partial term to complete" }, "limit": { "type": "number", "description": "Max suggestions (default 5)" } }, "required": [ "prefix" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-fts" }, "license": "MIT" }, { "name": "fullaudit", "version": "1.1.0", "description": "Full project audit workflow — code quality review, security scan, architecture analysis, and metrics report.", "tags": [ "audit", "workflow", "quality", "security" ], "dependencies": [ "codebase", "review", "metrics" ], "tools": [ { "name": "run", "description": "Run a full audit on a project directory — code quality, security, architecture patterns.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Project root directory" }, "checks": { "type": "array", "items": { "type": "string" }, "description": "Checks to run: 'code', 'security', 'architecture' (default: all)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "report", "description": "Generate a markdown audit report from the last run.", "inputSchema": { "type": "object", "properties": { "format": { "type": "string", "description": "'markdown', 'json', or 'summary' (default 'markdown')" } }, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-fullaudit" }, "license": "MIT" }, { "name": "graphbuild", "version": "1.1.0", "description": "Knowledge graph builder — construct a graph of code entities (files, functions, types) and their relationships.", "tags": [ "graph", "knowledge", "codebase", "relationships" ], "dependencies": [], "tools": [ { "name": "build", "description": "Build a knowledge graph from a directory by scanning imports, exports, and call sites.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to scan" }, "maxFiles": { "type": "number", "description": "Max files to scan (default 200)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "update", "description": "Incrementally update the graph for changed files without full rebuild.", "inputSchema": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "string" }, "description": "Changed file paths to re-scan" } }, "required": [ "files" ], "additionalProperties": false } }, { "name": "watch", "description": "Return graph stats and detect stale nodes (files that no longer exist).", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } }, { "name": "add", "description": "Manually add a node or edge to the graph.", "inputSchema": { "type": "object", "properties": { "node": { "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string" }, "label": { "type": "string" } }, "description": "Node to add" }, "edge": { "type": "object", "properties": { "from": { "type": "string" }, "to": { "type": "string" }, "type": { "type": "string" } }, "description": "Edge to add" } }, "additionalProperties": false } }, { "name": "multimodal", "description": "Return the graph in multiple formats: summary stats, node list, edge list.", "inputSchema": { "type": "object", "properties": { "format": { "type": "string", "description": "Output format: 'summary', 'nodes', 'edges', 'full' (default 'summary')" } }, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-graphbuild" }, "license": "MIT" }, { "name": "graphcluster", "version": "1.1.0", "description": "Graph clustering — detect communities, explain groupings, identify architecture layers.", "tags": [ "graph", "cluster", "community", "architecture", "analysis" ], "dependencies": [], "tools": [ { "name": "cluster", "description": "Detect clusters of tightly connected nodes using label propagation algorithm.", "inputSchema": { "type": "object", "properties": { "maxClusters": { "type": "number", "description": "Max clusters to detect (default 10)" } }, "additionalProperties": false } }, { "name": "communities", "description": "List all detected communities with their members and interconnection density.", "inputSchema": { "type": "object", "properties": { "minSize": { "type": "number", "description": "Minimum community size (default 2)" } }, "additionalProperties": false } }, { "name": "explain", "description": "Explain a cluster — what connects its members, common types, shared dependencies.", "inputSchema": { "type": "object", "properties": { "clusterId": { "type": "number", "description": "Cluster index from cluster results" } }, "required": [ "clusterId" ], "additionalProperties": false } }, { "name": "architecture", "description": "Detect architecture layers — group nodes by directory depth and dependency direction (top-down).", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-graphcluster" }, "license": "MIT" }, { "name": "graphexport", "version": "1.2.0", "description": "Generate visualizations from a provided or upstream graph. For upstream graphs, use with graphbuild/callgraph/depgraph first. Alternatively, load an inline graph via ge_input(graph) to use standalone.", "tags": [ "graph", "export", "mermaid", "graphml", "cypher", "obsidian" ], "dependencies": [], "tools": [ { "name": "input", "description": "Load an inline graph (nodes + edges JSON) into ambient state for subsequent export tools. Use this to make graphexport standalone without an upstream graphbuild/callgraph/depgraph brick.", "inputSchema": { "type": "object", "properties": { "graph": { "type": "object", "description": "Inline graph with nodes and edges arrays", "properties": { "nodes": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "label": { "type": "string" }, "type": { "type": "string" } }, "required": [ "id", "label", "type" ] } }, "edges": { "type": "array", "items": { "type": "object", "properties": { "from": { "type": "string" }, "to": { "type": "string" }, "type": { "type": "string" } }, "required": [ "from", "to", "type" ] } } }, "required": [ "nodes", "edges" ] } }, "required": [ "graph" ], "additionalProperties": false } }, { "name": "html", "description": "Export graph as a standalone HTML page with a simple SVG visualization. Pass graph inline or rely on upstream graphbuild/callgraph/depgraph context.", "inputSchema": { "type": "object", "properties": { "title": { "type": "string", "description": "Page title (default 'Knowledge Graph')" }, "graph": { "type": "object", "description": "Optional inline graph (overrides upstream context)", "properties": { "nodes": { "type": "array" }, "edges": { "type": "array" } } } }, "additionalProperties": false } }, { "name": "mermaid", "description": "Export graph as Mermaid diagram syntax. Pass graph inline or rely on upstream graphbuild/callgraph/depgraph context.", "inputSchema": { "type": "object", "properties": { "direction": { "type": "string", "description": "TB, LR, BT, RL (default TB)" }, "graph": { "type": "object", "description": "Optional inline graph (overrides upstream context)", "properties": { "nodes": { "type": "array" }, "edges": { "type": "array" } } } }, "additionalProperties": false } }, { "name": "graphml", "description": "Export graph as GraphML XML format. Pass graph inline or rely on upstream graphbuild/callgraph/depgraph context.", "inputSchema": { "type": "object", "properties": { "graph": { "type": "object", "description": "Optional inline graph (overrides upstream context)", "properties": { "nodes": { "type": "array" }, "edges": { "type": "array" } } } }, "additionalProperties": false } }, { "name": "cypher", "description": "Export graph as Cypher CREATE statements (Neo4j compatible). Pass graph inline or rely on upstream graphbuild/callgraph/depgraph context.", "inputSchema": { "type": "object", "properties": { "graph": { "type": "object", "description": "Optional inline graph (overrides upstream context)", "properties": { "nodes": { "type": "array" }, "edges": { "type": "array" } } } }, "additionalProperties": false } }, { "name": "obsidian", "description": "Export graph as Obsidian-compatible markdown files with [[wikilinks]]. Pass graph inline or rely on upstream graphbuild/callgraph/depgraph context.", "inputSchema": { "type": "object", "properties": { "graph": { "type": "object", "description": "Optional inline graph (overrides upstream context)", "properties": { "nodes": { "type": "array" }, "edges": { "type": "array" } } } }, "additionalProperties": false } }, { "name": "wiki", "description": "Export graph as a single wiki-style markdown document with sections per node. Pass graph inline or rely on upstream graphbuild/callgraph/depgraph context.", "inputSchema": { "type": "object", "properties": { "graph": { "type": "object", "description": "Optional inline graph (overrides upstream context)", "properties": { "nodes": { "type": "array" }, "edges": { "type": "array" } } } }, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-graphexport" }, "license": "MIT" }, { "name": "graphquery", "version": "1.1.0", "description": "Knowledge graph query — find nodes, traverse neighbors, find paths, filter by type.", "tags": [ "graph", "query", "traversal", "path", "knowledge" ], "dependencies": [], "tools": [ { "name": "query", "description": "Query the graph with a pattern — find nodes by type, label substring, or connected to a specific node.", "inputSchema": { "type": "object", "properties": { "pattern": { "type": "string", "description": "Search pattern (substring match on label)" }, "type": { "type": "string", "description": "Filter by node type" }, "limit": { "type": "number", "description": "Max results (default 20)" } }, "required": [ "pattern" ], "additionalProperties": false } }, { "name": "node", "description": "Get full details of a specific node by ID, including all edges.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Node ID" } }, "required": [ "id" ], "additionalProperties": false } }, { "name": "neighbors", "description": "Find all nodes connected to a given node (incoming and outgoing edges).", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Node ID" }, "direction": { "type": "string", "description": "'in', 'out', or 'both' (default 'both')" }, "edgeType": { "type": "string", "description": "Filter by edge type" } }, "required": [ "id" ], "additionalProperties": false } }, { "name": "path", "description": "Find shortest path between two nodes using BFS.", "inputSchema": { "type": "object", "properties": { "from": { "type": "string", "description": "Start node ID" }, "to": { "type": "string", "description": "End node ID" }, "maxDepth": { "type": "number", "description": "Max path length (default 5)" } }, "required": [ "from", "to" ], "additionalProperties": false } }, { "name": "filter", "description": "Filter the graph to a subgraph matching criteria (node types, edge types).", "inputSchema": { "type": "object", "properties": { "nodeTypes": { "type": "array", "items": { "type": "string" }, "description": "Keep only these node types" }, "edgeTypes": { "type": "array", "items": { "type": "string" }, "description": "Keep only these edge types" } }, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-graphquery" }, "license": "MIT" }, { "name": "heatmap", "version": "1.1.0", "description": "File access heatmap — track read/write patterns, detect hot and cold files.", "tags": [ "heatmap", "tracking", "patterns", "files", "analysis" ], "dependencies": [], "tools": [ { "name": "track", "description": "Record a file access (read or write) with the current timestamp.", "inputSchema": { "type": "object", "properties": { "file": { "type": "string", "description": "Absolute or relative path of the accessed file" }, "type": { "type": "string", "enum": [ "read", "write" ], "description": "Access type: 'read' or 'write'" } }, "required": [ "file", "type" ], "additionalProperties": false } }, { "name": "hotfiles", "description": "Return the most frequently accessed files, optionally filtered by access type.", "inputSchema": { "type": "object", "properties": { "limit": { "type": "number", "description": "Maximum number of files to return (default 10)" }, "type": { "type": "string", "enum": [ "read", "write" ], "description": "Filter by access type (omit for combined count)" } }, "required": [], "additionalProperties": false } }, { "name": "patterns", "description": "Detect access patterns — files commonly accessed together within 1 second of each other.", "inputSchema": { "type": "object", "properties": {}, "required": [], "additionalProperties": false } }, { "name": "coldfiles", "description": "Find files that have not been accessed within a given time threshold.", "inputSchema": { "type": "object", "properties": { "threshold": { "type": "number", "description": "Inactivity threshold in milliseconds (default 3600000 = 1 hour)" } }, "required": [], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-heatmap" }, "license": "MIT" }, { "name": "impact", "version": "1.1.0", "description": "Change impact analysis — given a file or symbol, find what files are affected by a change.", "tags": [ "impact", "dependencies", "analysis", "refactoring" ], "dependencies": [], "tools": [ { "name": "analyze", "description": "Analyze impact of changing a file: find direct and indirect dependents.", "inputSchema": { "type": "object", "properties": { "file": { "type": "string", "description": "Absolute path to the changed file" }, "dir": { "type": "string", "description": "Root directory of the project" } }, "required": [ "file", "dir" ], "additionalProperties": false } }, { "name": "affected", "description": "List all files affected by changes to the given set of files.", "inputSchema": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "string" }, "description": "List of changed file paths" }, "dir": { "type": "string", "description": "Root directory of the project" } }, "required": [ "files", "dir" ], "additionalProperties": false } }, { "name": "propagate", "description": "Trace how a change propagates through the dependency graph.", "inputSchema": { "type": "object", "properties": { "file": { "type": "string", "description": "Absolute path to the changed file" }, "dir": { "type": "string", "description": "Root directory of the project" }, "maxDepth": { "type": "number", "description": "Max propagation depth (default 3)" } }, "required": [ "file", "dir" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-impact" }, "license": "MIT" }, { "name": "inline", "version": "1.1.0", "description": "Inline, extract, and move refactoring — inline variables/functions, extract code to new functions, move between files.", "tags": [ "inline", "extract", "move", "refactoring", "codemod" ], "dependencies": [], "tools": [ { "name": "inline", "description": "Inline a variable or simple function — replace all usages with the definition, then remove the definition.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path" }, "name": { "type": "string", "description": "Variable or function name to inline" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" } }, "required": [ "path", "name" ], "additionalProperties": false } }, { "name": "extract", "description": "Extract lines from a file into a new named function. The original lines are replaced with a call.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path" }, "startLine": { "type": "number", "description": "Start line (1-based)" }, "endLine": { "type": "number", "description": "End line (1-based, inclusive)" }, "functionName": { "type": "string", "description": "Name for the extracted function" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" } }, "required": [ "path", "startLine", "endLine", "functionName" ], "additionalProperties": false } }, { "name": "move", "description": "Move a function or export from one file to another, updating imports in both files.", "inputSchema": { "type": "object", "properties": { "sourcePath": { "type": "string", "description": "Source file path" }, "targetPath": { "type": "string", "description": "Target file path" }, "name": { "type": "string", "description": "Function/export name to move" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" } }, "required": [ "sourcePath", "targetPath", "name" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-inline" }, "license": "MIT" }, { "name": "knowledge", "version": "1.1.0", "description": "Knowledge base — index documents, search by content, fetch entries, purge stale data, rank by relevance.", "tags": [ "knowledge", "search", "index", "documents", "knowledgebase" ], "dependencies": [], "tools": [ { "name": "index", "description": "Index a document or note into the knowledge base with tags and metadata.", "inputSchema": { "type": "object", "properties": { "title": { "type": "string", "description": "Document title" }, "content": { "type": "string", "description": "Document content" }, "tags": { "type": "array", "items": { "type": "string" }, "description": "Tags for categorization" }, "source": { "type": "string", "description": "Source reference (URL, file path, etc.)" } }, "required": [ "title", "content" ], "additionalProperties": false } }, { "name": "search", "description": "Search the knowledge base by query. Returns ranked results.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query" }, "tags": { "type": "array", "items": { "type": "string" }, "description": "Filter by tags" }, "limit": { "type": "number", "description": "Max results (default 10)" } }, "required": [ "query" ], "additionalProperties": false } }, { "name": "fetch", "description": "Fetch a specific knowledge entry by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Entry ID" } }, "required": [ "id" ], "additionalProperties": false } }, { "name": "purge", "description": "Remove entries older than a given age or matching specific tags.", "inputSchema": { "type": "object", "properties": { "olderThanDays": { "type": "number", "description": "Remove entries older than N days" }, "tags": { "type": "array", "items": { "type": "string" }, "description": "Remove entries with these tags" } }, "additionalProperties": false } }, { "name": "rank", "description": "Re-rank existing search results by additional criteria (recency, tag match, content length).", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query" }, "boost": { "type": "string", "description": "Boost factor: 'recency', 'tags', 'length' (default 'recency')" }, "limit": { "type": "number", "description": "Max results (default 10)" } }, "required": [ "query" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-knowledge" }, "license": "MIT" }, { "name": "knowledgebase", "version": "1.1.0", "description": "Knowledge base — loads knowledge, fts, graphbuild, graphquery for document indexing and graph-powered search.", "tags": [ "knowledgebase", "composite", "search", "graph" ], "dependencies": [ "knowledge", "fts", "graphbuild", "graphquery" ], "tools": [], "source": { "type": "npm", "package": "@focus-mcp/brick-knowledgebase" }, "license": "MIT" }, { "name": "lastversion", "version": "1.2.1", "description": "Package version intelligence — latest version, diff, changelog, audit across npm/pypi/github/gitlab.", "tags": [ "version", "release", "npm", "pypi", "github", "audit", "security", "updates" ], "dependencies": [], "tools": [ { "name": "latest", "description": "Get the latest version of a package with metadata (date, deprecated flag, LTS flag, audit count).", "inputSchema": { "type": "object", "properties": { "source": { "type": "string", "description": "Source: npm, pypi, github, gitlab, cargo, rubygems, gomod" }, "target": { "type": "string", "description": "Package name or owner/repo (for github/gitlab)" }, "includePrerelease": { "type": "boolean", "description": "Include pre-releases (alpha/beta/rc). Default false." } }, "required": [ "source", "target" ], "additionalProperties": false } }, { "name": "versions", "description": "List recent versions of a package, optionally filtered by semver range or stable-only.", "inputSchema": { "type": "object", "properties": { "source": { "type": "string", "description": "Source: npm, pypi, github, gitlab" }, "target": { "type": "string", "description": "Package name or owner/repo" }, "range": { "type": "string", "description": "Semver range (e.g. '>=18.0.0')" }, "limit": { "type": "number", "description": "Max results (default 20)" }, "stable": { "type": "boolean", "description": "Stable only (filter pre-releases). Default true." } }, "required": [ "source", "target" ], "additionalProperties": false } }, { "name": "diff", "description": "Compare two versions: bump type (patch/minor/major/breaking), days between, breaking change hints.", "inputSchema": { "type": "object", "properties": { "source": { "type": "string", "description": "Source: npm, pypi, github, gitlab" }, "target": { "type": "string", "description": "Package name or owner/repo" }, "from": { "type": "string", "description": "Source version" }, "to": { "type": "string", "description": "Target version" } }, "required": [ "source", "target", "from", "to" ], "additionalProperties": false } }, { "name": "changelog", "description": "Fetch release notes aggregated between two versions (from GitHub Releases API).", "inputSchema": { "type": "object", "properties": { "repo": { "type": "string", "description": "GitHub repo owner/name" }, "from": { "type": "string", "description": "Start version (tag)" }, "to": { "type": "string", "description": "End version (tag). Default: latest." }, "limit": { "type": "number", "description": "Max releases to return (default 20)" } }, "required": [ "repo" ], "additionalProperties": false } }, { "name": "check", "description": "Check if a currently installed version is outdated. Returns staleness analysis with bump type and days behind.", "inputSchema": { "type": "object", "properties": { "source": { "type": "string", "description": "Source: npm, pypi, github, gitlab" }, "target": { "type": "string", "description": "Package name or owner/repo" }, "current": { "type": "string", "description": "Currently installed version" } }, "required": [ "source", "target", "current" ], "additionalProperties": false } }, { "name": "audit", "description": "Fetch security advisories for a package version (GitHub Advisory DB via OSV.dev). Returns top 10 entries by severity DESC.", "inputSchema": { "type": "object", "properties": { "source": { "type": "string", "description": "Source: npm, pypi, github, cargo, gomod" }, "target": { "type": "string", "description": "Package name" }, "version": { "type": "string", "description": "Specific version to check (optional)" } }, "required": [ "source", "target" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-lastversion" }, "license": "MIT" }, { "name": "memory", "version": "1.1.1", "description": "Persistent key-value memory — store and recall information across sessions as JSON files.", "tags": [ "memory", "storage", "persistence", "key-value" ], "dependencies": [], "tools": [ { "name": "store", "description": "Save a key-value pair to persistent memory.", "inputSchema": { "type": "object", "properties": { "key": { "type": "string", "description": "Memory key" }, "value": { "type": "string", "description": "Value to store" }, "tags": { "type": "array", "items": { "type": "string" }, "description": "Optional tags for categorization" } }, "required": [ "key", "value" ], "additionalProperties": false } }, { "name": "recall", "description": "Get a value by key from persistent memory.", "inputSchema": { "type": "object", "properties": { "key": { "type": "string", "description": "Memory key" } }, "required": [ "key" ], "additionalProperties": false } }, { "name": "search", "description": "Search memories by query (substring match on key, value, and tags).", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query" }, "limit": { "type": "number", "description": "Max results (default 10)" } }, "required": [ "query" ], "additionalProperties": false } }, { "name": "forget", "description": "Delete a memory entry by key.", "inputSchema": { "type": "object", "properties": { "key": { "type": "string", "description": "Memory key to delete" } }, "required": [ "key" ], "additionalProperties": false } }, { "name": "list", "description": "List all memory keys, optionally filtered by tag. Returns up to 100 entries by default; set limit=0 for unlimited.", "inputSchema": { "type": "object", "properties": { "tag": { "type": "string", "description": "Filter by tag (optional)" }, "limit": { "type": "number", "description": "Max entries to return (default 100, set 0 for unlimited)" } }, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-memory" }, "license": "MIT" }, { "name": "metrics", "version": "1.2.0", "description": "Session metrics tracking — token usage, costs, duration, and per-tool statistics.", "tags": [ "metrics", "tokens", "costs", "duration", "session", "observability" ], "dependencies": [], "tools": [ { "name": "session", "description": "Get or reset session metrics summary.", "inputSchema": { "type": "object", "properties": { "reset": { "type": "boolean", "description": "If true, reset all session metrics and return empty summary." } }, "additionalProperties": false } }, { "name": "tokens", "description": "Track token usage — record input/output tokens per tool call.", "inputSchema": { "type": "object", "properties": { "tool": { "type": "string", "description": "Name of the tool call being recorded." }, "inputTokens": { "type": "number", "description": "Number of input tokens consumed." }, "outputTokens": { "type": "number", "description": "Number of output tokens produced." } }, "required": [ "tool", "inputTokens", "outputTokens" ], "additionalProperties": false } }, { "name": "costs", "description": "Calculate estimated costs based on token usage and model pricing.", "inputSchema": { "type": "object", "properties": { "inputPricePer1k": { "type": "number", "description": "Cost per 1 000 input tokens in USD. Default: 0.003." }, "outputPricePer1k": { "type": "number", "description": "Cost per 1 000 output tokens in USD. Default: 0.015." } }, "additionalProperties": false } }, { "name": "duration", "description": "Track and report tool call durations.", "inputSchema": { "type": "object", "properties": { "tool": { "type": "string", "description": "Filter duration stats to a specific tool name." }, "last": { "type": "number", "description": "Return stats for the last N tool calls." } }, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-metrics" }, "license": "MIT" }, { "name": "multiread", "version": "1.1.0", "description": "Batch file reading — multiple files in one call, deduplication.", "tags": [ "file", "read", "batch", "tokens" ], "dependencies": [], "tools": [ { "name": "batch", "description": "Read multiple files in one call", "inputSchema": { "type": "object", "properties": { "paths": { "type": "array", "items": { "type": "string" }, "description": "List of file paths to read" } }, "required": [ "paths" ], "additionalProperties": false } }, { "name": "dedup", "description": "Read multiple files, deduplicate shared imports/headers", "inputSchema": { "type": "object", "properties": { "paths": { "type": "array", "items": { "type": "string" } } }, "required": [ "paths" ], "additionalProperties": false } }, { "name": "merge", "description": "Read and concatenate files with separators", "inputSchema": { "type": "object", "properties": { "paths": { "type": "array", "items": { "type": "string" } }, "separator": { "type": "string", "description": "Separator between files (default: filename header)" } }, "required": [ "paths" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-multiread" }, "license": "MIT" }, { "name": "onboarding", "version": "1.1.0", "description": "Project onboarding workflow — auto-discover project structure, conventions, and key files for a new contributor or AI agent.", "tags": [ "onboarding", "workflow", "project", "guide" ], "dependencies": [ "codebase", "smartcontext", "overview" ], "tools": [ { "name": "scan", "description": "Full project onboarding scan — detect framework, architecture, conventions, key files, and build a context summary.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Project root directory" }, "budget": { "type": "number", "description": "Token budget for context (default 4000)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "guide", "description": "Generate a contributor guide based on scan results — what to read first, coding standards, key patterns.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Project root directory" } }, "required": [ "dir" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-onboarding" }, "license": "MIT" }, { "name": "outline", "version": "1.1.0", "description": "File and repo structure outline — list exported symbols and directory trees without reading full content.", "tags": [ "outline", "symbols", "structure", "navigation" ], "dependencies": [], "tools": [ { "name": "file", "description": "Outline a single file: list exported symbols with line numbers, no body.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute path to file" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "repo", "description": "Outline entire repo: per-file symbol summary.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to scan" }, "maxFiles": { "type": "number", "description": "Max files to scan (default 100)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "structure", "description": "Directory structure with file counts per folder.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to scan" }, "maxDepth": { "type": "number", "description": "Max depth (default 3)" } }, "required": [ "dir" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-outline" }, "license": "MIT" }, { "name": "overview", "version": "1.1.0", "description": "Project-level understanding without reading all files — detect framework, language, conventions, and architecture.", "tags": [ "overview", "project", "architecture", "conventions" ], "dependencies": [], "tools": [ { "name": "project", "description": "Scan root dir and detect project metadata: name, framework, language, type, scripts, packageManager.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to scan" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "architecture", "description": "Scan directory structure, count files per folder, detect architectural patterns.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to scan" }, "maxDepth": { "type": "number", "description": "Max directory depth (default 3)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "conventions", "description": "Read sample files and detect coding conventions: indent, quotes, semicolons, import style.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to scan" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "dependencies", "description": "Parse package.json and categorize dependencies: production, dev, framework, testRunner, linter, bundler.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory containing package.json" } }, "required": [ "dir" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-overview" }, "license": "MIT" }, { "name": "parallel", "version": "1.2.0", "description": "Parallel execution coordination — run tasks concurrently, collect results, merge outputs, handle timeouts.", "tags": [ "parallel", "concurrent", "merge", "orchestration" ], "dependencies": [], "tools": [ { "name": "run", "description": "Run multiple shell commands in parallel with concurrency control.", "inputSchema": { "type": "object", "properties": { "tasks": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "command": { "type": "string" } }, "required": [ "id", "command" ] }, "description": "Tasks to run" }, "concurrency": { "type": "number", "description": "Max concurrent tasks (default: all)" }, "cwd": { "type": "string", "description": "Working directory" } }, "required": [ "tasks" ], "additionalProperties": false } }, { "name": "collect", "description": "Collect and aggregate results from a previous parallel run.", "inputSchema": { "type": "object", "properties": { "runId": { "type": "string", "description": "Run ID from a previous par_run call" } }, "required": [ "runId" ], "additionalProperties": false } }, { "name": "merge", "description": "Merge multiple text outputs into one, with separators and optional dedup.", "inputSchema": { "type": "object", "properties": { "outputs": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "content": { "type": "string" } }, "required": [ "id", "content" ] }, "description": "Outputs to merge" }, "separator": { "type": "string", "description": "Separator between outputs (default: newline)" }, "dedup": { "type": "boolean", "description": "Remove duplicate lines (default false)" } }, "required": [ "outputs" ], "additionalProperties": false } }, { "name": "timeout", "description": "Set or check timeout configuration for parallel runs.", "inputSchema": { "type": "object", "properties": { "defaultMs": { "type": "number", "description": "Default timeout per task in ms" }, "runId": { "type": "string", "description": "Check timeout status of a run" } }, "additionalProperties": false } }, { "name": "run_inline", "description": "Run parallel tasks and return results inline in a single response (combines run + collect, avoids 2 round-trips). Use this when you need results immediately rather than polling collect later.", "inputSchema": { "type": "object", "properties": { "tasks": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "command": { "type": "string" } }, "required": [ "id", "command" ] }, "description": "Tasks to run" }, "concurrency": { "type": "number", "description": "Max concurrent tasks (default: all)" }, "cwd": { "type": "string", "description": "Working directory" } }, "required": [ "tasks" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-parallel" }, "license": "MIT" }, { "name": "planning", "version": "1.1.0", "description": "Structured planning — create plans with steps, dependencies, and time estimates.", "tags": [ "planning", "steps", "dependencies", "estimation", "workflow" ], "dependencies": [], "tools": [ { "name": "create", "description": "Create a new plan with a title and optional description.", "inputSchema": { "type": "object", "properties": { "title": { "type": "string", "description": "Plan title" }, "description": { "type": "string", "description": "Plan description" } }, "required": [ "title" ], "additionalProperties": false } }, { "name": "steps", "description": "Add or list steps in a plan. Each step has a title, optional estimate, and status.", "inputSchema": { "type": "object", "properties": { "planId": { "type": "string", "description": "Plan ID" }, "add": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string" }, "estimate": { "type": "string", "description": "Time estimate (e.g. '2h', '30m')" } }, "required": [ "title" ] }, "description": "Steps to add" }, "complete": { "type": "number", "description": "Mark step at this index as done" } }, "required": [ "planId" ], "additionalProperties": false } }, { "name": "dependencies", "description": "Define dependencies between steps — step B depends on step A.", "inputSchema": { "type": "object", "properties": { "planId": { "type": "string", "description": "Plan ID" }, "from": { "type": "number", "description": "Step index that must complete first" }, "to": { "type": "number", "description": "Step index that depends on 'from'" } }, "required": [ "planId", "from", "to" ], "additionalProperties": false } }, { "name": "estimate", "description": "Get plan summary — total steps, completed, blocked, estimated time remaining.", "inputSchema": { "type": "object", "properties": { "planId": { "type": "string", "description": "Plan ID" } }, "required": [ "planId" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-planning" }, "license": "MIT" }, { "name": "refs", "version": "1.1.0", "description": "Cross-references — find who imports or uses a symbol, locate declarations, and trace inheritance chains.", "tags": [ "references", "cross-references", "symbols", "navigation" ], "dependencies": [], "tools": [ { "name": "references", "description": "Find all files that import or reference a symbol name.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Symbol name to search for" }, "dir": { "type": "string", "description": "Root directory to scan" } }, "required": [ "name", "dir" ], "additionalProperties": false } }, { "name": "implementations", "description": "Find implementations of an interface or type.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Interface or type name" }, "dir": { "type": "string", "description": "Root directory to scan" } }, "required": [ "name", "dir" ], "additionalProperties": false } }, { "name": "declaration", "description": "Find where a symbol is declared or exported.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Symbol name" }, "dir": { "type": "string", "description": "Root directory to scan" } }, "required": [ "name", "dir" ], "additionalProperties": false } }, { "name": "hierarchy", "description": "Class or interface inheritance chain.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Class or interface name" }, "dir": { "type": "string", "description": "Root directory to scan" } }, "required": [ "name", "dir" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-refs" }, "license": "MIT" }, { "name": "rename", "version": "1.1.0", "description": "Rename refactoring — rename symbols across files, rename files with import updates, bulk rename with preview.", "tags": [ "rename", "refactoring", "symbol", "codemod" ], "dependencies": [], "tools": [ { "name": "symbol", "description": "Rename a symbol (function, variable, class, type) across all files in a directory. Dry run by default.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to search" }, "oldName": { "type": "string", "description": "Current symbol name" }, "newName": { "type": "string", "description": "New symbol name" }, "apply": { "type": "boolean", "description": "Apply changes (default false = dry run)" } }, "required": [ "dir", "oldName", "newName" ], "additionalProperties": false } }, { "name": "file", "description": "Rename a file and update all imports referencing it across the project.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Current file path" }, "newName": { "type": "string", "description": "New filename (just the name, not full path)" }, "dir": { "type": "string", "description": "Project root to update imports in" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" } }, "required": [ "path", "newName" ], "additionalProperties": false } }, { "name": "bulk", "description": "Rename multiple symbols at once. Useful for coordinated renames.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory" }, "renames": { "type": "array", "items": { "type": "object", "properties": { "oldName": { "type": "string" }, "newName": { "type": "string" } }, "required": [ "oldName", "newName" ] }, "description": "List of renames" }, "apply": { "type": "boolean", "description": "Apply changes (default false)" } }, "required": [ "dir", "renames" ], "additionalProperties": false } }, { "name": "preview", "description": "Preview what a symbol rename would change without any mutation. Shows affected files and line numbers.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory" }, "oldName": { "type": "string", "description": "Symbol to search for" } }, "required": [ "dir", "oldName" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-rename" }, "license": "MIT" }, { "name": "repos", "version": "1.1.0", "description": "Multi-repo management — register, track, and get stats for multiple repositories.", "tags": [ "repos", "multi-repo", "management", "stats" ], "dependencies": [], "tools": [ { "name": "list", "description": "List all registered repositories.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } }, { "name": "register", "description": "Register a repository path by name.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Repository name" }, "path": { "type": "string", "description": "Absolute path to the repository" } }, "required": [ "name", "path" ], "additionalProperties": false } }, { "name": "unregister", "description": "Remove a registered repository.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Repository name to remove" } }, "required": [ "name" ], "additionalProperties": false } }, { "name": "stats", "description": "Get file and line count statistics for a registered repository.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Repository name" } }, "required": [ "name" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-repos" }, "license": "MIT" }, { "name": "research", "version": "1.1.0", "description": "Multi-source research — collect info from multiple files/sources, synthesize findings, validate consistency.", "tags": [ "research", "multisource", "synthesize", "validate", "analysis" ], "dependencies": [], "tools": [ { "name": "multisource", "description": "Read multiple files and extract key information (exports, types, patterns) from each.", "inputSchema": { "type": "object", "properties": { "paths": { "type": "array", "items": { "type": "string" }, "description": "Absolute paths to the files to read and analyze" } }, "required": [ "paths" ], "additionalProperties": false } }, { "name": "synthesize", "description": "Combine findings from multiple sources into a structured summary.", "inputSchema": { "type": "object", "properties": { "sources": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string" }, "exports": { "type": "array", "items": { "type": "string" } }, "imports": { "type": "array", "items": { "type": "string" } }, "types": { "type": "array", "items": { "type": "string" } }, "functions": { "type": "array", "items": { "type": "string" } } }, "required": [ "path", "exports", "imports", "types", "functions" ], "additionalProperties": false }, "description": "Array of source analysis objects from multisource" } }, "required": [ "sources" ], "additionalProperties": false } }, { "name": "validate", "description": "Cross-check findings for consistency — conflicting types, unused exports, missing dependencies.", "inputSchema": { "type": "object", "properties": { "sources": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string" }, "exports": { "type": "array", "items": { "type": "string" } }, "imports": { "type": "array", "items": { "type": "string" } }, "types": { "type": "array", "items": { "type": "string" } }, "functions": { "type": "array", "items": { "type": "string" } } }, "required": [ "path", "exports", "imports", "types", "functions" ], "additionalProperties": false }, "description": "Array of source analysis objects from multisource" } }, "required": [ "sources" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-research" }, "license": "MIT" }, { "name": "review", "version": "1.1.0", "description": "Structured code review — analyze code quality, security, architecture patterns, compare versions.", "tags": [ "review", "code-quality", "security", "architecture", "diff" ], "dependencies": [], "tools": [ { "name": "code", "description": "Review a file for code quality — complexity, naming, patterns. Returns findings.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute path to the file to review" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "security", "description": "Review a file for security issues — hardcoded secrets, eval, SQL injection patterns.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute path to the file to review" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "architecture", "description": "Review directory structure for architecture patterns (layers, modules, coupling).", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Absolute path to the directory to review" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "compare", "description": "Compare two file versions and list what changed (additions, removals, modifications).", "inputSchema": { "type": "object", "properties": { "pathA": { "type": "string", "description": "Absolute path to the first (original) file" }, "pathB": { "type": "string", "description": "Absolute path to the second (modified) file" } }, "required": [ "pathA", "pathB" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-review" }, "license": "MIT" }, { "name": "routes", "version": "1.1.0", "description": "API route detection — scan projects for Express, Fastify, Next.js, SvelteKit route definitions.", "tags": [ "routes", "api", "endpoints", "express", "web" ], "dependencies": [], "tools": [ { "name": "scan", "description": "Scan a project directory and detect all API routes/endpoints with HTTP methods.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to scan" }, "framework": { "type": "string", "description": "Force framework (express, fastify, nextjs, sveltekit). Auto-detects if omitted." } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "search", "description": "Search routes by path pattern or HTTP method.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory" }, "pattern": { "type": "string", "description": "Path pattern to search (e.g. '/api/user')" }, "method": { "type": "string", "description": "HTTP method filter (GET, POST, etc.)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "list", "description": "List all detected routes in a compact table format.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "frameworks", "description": "Detect which web frameworks are used in the project.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory" } }, "required": [ "dir" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-routes" }, "license": "MIT" }, { "name": "sandbox", "version": "1.2.1", "description": "Sandboxed code execution — run JavaScript/TypeScript snippets in an isolated VM context.", "tags": [ "sandbox", "execution", "vm", "javascript", "typescript", "devtools" ], "dependencies": [], "tools": [ { "name": "run", "description": "Execute a JavaScript or TypeScript snippet in a sandboxed VM context. TypeScript is auto-transpiled via esbuild. Returns the result of the last expression.", "inputSchema": { "type": "object", "properties": { "code": { "type": "string", "description": "JavaScript or TypeScript code to execute" }, "timeout": { "type": "number", "description": "Execution timeout in ms (default 5000)" } }, "required": [ "code" ], "additionalProperties": false } }, { "name": "file", "description": "Read a file and execute it in the sandbox. Returns the module exports or last expression.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Path to JS/TS file to execute" }, "timeout": { "type": "number", "description": "Execution timeout in ms (default 5000)" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "eval", "description": "Evaluate a JavaScript or TypeScript expression and return its value. Lighter than run — single expression only. TypeScript is auto-transpiled via esbuild.", "inputSchema": { "type": "object", "properties": { "expression": { "type": "string", "description": "JavaScript or TypeScript expression to evaluate" }, "timeout": { "type": "number", "description": "Timeout in ms (default 2000)" } }, "required": [ "expression" ], "additionalProperties": false } }, { "name": "languages", "description": "List supported languages and their status.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } }, { "name": "read", "description": "Read a file from the current working directory (bounded — no absolute paths, no ../ escapes). Returns the file contents as a string. Use this to load source files from the codebase before processing them in the sandbox.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Relative path to the file within the working directory (e.g. 'src/utils.ts'). Absolute paths and directory traversal are rejected." } }, "required": [ "path" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-sandbox" }, "license": "MIT" }, { "name": "savings", "version": "1.1.0", "description": "Track and report token savings — compare FocusMCP usage vs naive full-read, trend over time, ROI.", "tags": [ "savings", "tokens", "roi", "metrics", "efficiency" ], "dependencies": [], "tools": [ { "name": "report", "description": "Generate a savings report — tokens saved vs baseline for a session.", "inputSchema": { "type": "object", "properties": { "baselineTokens": { "type": "number", "description": "Token count for naive full-read baseline" }, "actualTokens": { "type": "number", "description": "Token count actually consumed by FocusMCP" }, "duration": { "type": "number", "description": "Session duration in milliseconds (optional)" } }, "required": [ "baselineTokens", "actualTokens" ], "additionalProperties": false } }, { "name": "compare", "description": "Compare two sessions' efficiency — which saved more tokens.", "inputSchema": { "type": "object", "properties": { "sessionA": { "type": "string", "description": "ID of the first session to compare" }, "sessionB": { "type": "string", "description": "ID of the second session to compare" } }, "required": [ "sessionA", "sessionB" ], "additionalProperties": false } }, { "name": "trend", "description": "Show savings trend over multiple sessions — running average and direction.", "inputSchema": { "type": "object", "properties": { "last": { "type": "number", "description": "Number of most recent sessions to include (default: all)" } }, "additionalProperties": false } }, { "name": "roi", "description": "Calculate return on investment — time/cost saved vs FocusMCP overhead.", "inputSchema": { "type": "object", "properties": { "costPerToken": { "type": "number", "description": "Cost in USD per token (default: 0.000003)" }, "overheadMs": { "type": "number", "description": "FocusMCP overhead in milliseconds (default: 0)" } }, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-savings" }, "license": "MIT" }, { "name": "semanticsearch", "version": "1.1.0", "description": "Semantic search using TF-IDF vector space — cosine similarity, intent matching, document similarity.", "tags": [ "search", "semantic", "similarity", "tfidf", "vector", "intent" ], "dependencies": [], "tools": [ { "name": "search", "description": "Semantic search — find documents most similar to a query using cosine similarity on TF-IDF vectors.", "inputSchema": { "type": "object", "properties": { "corpus": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "text": { "type": "string" } }, "required": [ "id", "text" ] }, "description": "Documents to search" }, "query": { "type": "string", "description": "Search query" }, "limit": { "type": "number", "description": "Max results (default 5)" } }, "required": [ "corpus", "query" ], "additionalProperties": false } }, { "name": "similar", "description": "Find documents most similar to a given document (by ID or text).", "inputSchema": { "type": "object", "properties": { "corpus": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "text": { "type": "string" } }, "required": [ "id", "text" ] }, "description": "All documents" }, "targetId": { "type": "string", "description": "ID of document to find similar ones to" }, "limit": { "type": "number", "description": "Max results (default 5)" } }, "required": [ "corpus", "targetId" ], "additionalProperties": false } }, { "name": "intent", "description": "Classify a query against a set of intents (intent = label + example phrases). Returns best matching intent.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "User query to classify" }, "intents": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "examples": { "type": "array", "items": { "type": "string" } } }, "required": [ "label", "examples" ] }, "description": "Intent definitions" } }, "required": [ "query", "intents" ], "additionalProperties": false } }, { "name": "embeddings", "description": "Generate TF-IDF vector representation of texts. Useful for debugging or external processing.", "inputSchema": { "type": "object", "properties": { "texts": { "type": "array", "items": { "type": "string" }, "description": "Texts to vectorize" } }, "required": [ "texts" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-semanticsearch" }, "license": "MIT" }, { "name": "session", "version": "1.1.0", "description": "Session context save and restore — track loaded files and operations, persist sessions to disk.", "tags": [ "session", "context", "persistence", "restore" ], "dependencies": [], "tools": [ { "name": "save", "description": "Save current session state to disk.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Session name" }, "data": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "string" } }, "context": { "type": "string" }, "notes": { "type": "string" } }, "additionalProperties": false, "description": "Session data to save" } }, "required": [ "name", "data" ], "additionalProperties": false } }, { "name": "restore", "description": "Restore a saved session from disk.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Session name to restore" } }, "required": [ "name" ], "additionalProperties": false } }, { "name": "context", "description": "Get current in-memory session summary.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } }, { "name": "history", "description": "List all saved sessions.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-session" }, "license": "MIT" }, { "name": "share", "version": "1.1.0", "description": "Shared state for multi-agent — share context, files, results between agents, broadcast messages.", "tags": [ "share", "context", "broadcast", "multi-agent", "state" ], "dependencies": [], "tools": [ { "name": "context", "description": "Share or retrieve shared context (key-value store visible to all agents). If value is provided, sets the key. Always returns the current value.", "inputSchema": { "type": "object", "properties": { "key": { "type": "string", "description": "Context key to get or set" }, "value": { "type": "string", "description": "Value to store (JSON string). Omit to read." } }, "required": [ "key" ], "additionalProperties": false } }, { "name": "files", "description": "Share file references between agents — register which agent owns or watches which files. If files are provided, registers them. Otherwise lists files for the agent.", "inputSchema": { "type": "object", "properties": { "agentId": { "type": "string", "description": "Identifier of the agent registering or querying files" }, "files": { "type": "array", "items": { "type": "string" }, "description": "List of file paths to register for this agent. Omit to read." } }, "required": [ "agentId" ], "additionalProperties": false } }, { "name": "results", "description": "Share task results — store and retrieve results by task ID. If result is provided, stores it. Otherwise retrieves the stored result.", "inputSchema": { "type": "object", "properties": { "taskId": { "type": "string", "description": "Unique identifier of the task" }, "result": { "type": "string", "description": "Result to store (JSON string). Omit to read." } }, "required": [ "taskId" ], "additionalProperties": false } }, { "name": "broadcast", "description": "Send a message to all registered listeners (in-memory pub/sub). The message is logged and delivered synchronously to all current listeners.", "inputSchema": { "type": "object", "properties": { "message": { "type": "string", "description": "Message content to broadcast" }, "from": { "type": "string", "description": "Identifier of the agent sending the message" } }, "required": [ "message", "from" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-share" }, "license": "MIT" }, { "name": "shell", "version": "1.1.0", "description": "Shell command execution — run commands, background processes, kill, and compress output.", "tags": [ "shell", "exec", "command", "process", "devtools" ], "dependencies": [], "tools": [ { "name": "exec", "description": "Execute a shell command and return stdout, stderr, and exit code. Timeout after 30s by default.", "inputSchema": { "type": "object", "properties": { "command": { "type": "string", "description": "Shell command to execute" }, "cwd": { "type": "string", "description": "Working directory (default: process.cwd())" }, "timeout": { "type": "number", "description": "Timeout in milliseconds (default 30000)" }, "env": { "type": "object", "description": "Additional environment variables", "additionalProperties": { "type": "string" } } }, "required": [ "command" ], "additionalProperties": false } }, { "name": "background", "description": "Start a command in the background. Returns a process ID to check or kill later.", "inputSchema": { "type": "object", "properties": { "command": { "type": "string", "description": "Shell command to run in background" }, "cwd": { "type": "string", "description": "Working directory" } }, "required": [ "command" ], "additionalProperties": false } }, { "name": "kill", "description": "Kill a background process by its ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Process ID returned by background" } }, "required": [ "id" ], "additionalProperties": false } }, { "name": "compress", "description": "Execute a command and return compressed output — strips ANSI codes, collapses blank lines, truncates to maxLines.", "inputSchema": { "type": "object", "properties": { "command": { "type": "string", "description": "Shell command to execute" }, "cwd": { "type": "string", "description": "Working directory" }, "maxLines": { "type": "number", "description": "Max output lines (default 100)" }, "timeout": { "type": "number", "description": "Timeout in milliseconds (default 30000)" } }, "required": [ "command" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-shell" }, "license": "MIT" }, { "name": "smartcontext", "version": "1.1.0", "description": "Composite brick — orchestrates smartread, cache, compress, tokenbudget, and overview to deliver optimal context within a token budget.", "tags": [ "context", "composite", "orchestration", "tokens" ], "dependencies": [ "smartread", "cache", "compress", "tokenbudget", "overview" ], "tools": [ { "name": "load", "description": "Auto-discover relevant files for a task, choose read modes, and return optimal context within budget.", "inputSchema": { "type": "object", "properties": { "task": { "type": "string", "description": "Task description to contextualize" }, "dir": { "type": "string", "description": "Root directory to scan" }, "budget": { "type": "number", "description": "Token budget (default: 2000)" } }, "required": [ "task", "dir" ], "additionalProperties": false } }, { "name": "refresh", "description": "Re-check files for changes and update context using cache to detect stale entries.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Directory to refresh" }, "budget": { "type": "number", "description": "Token budget (default: 2000)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "status", "description": "Show current context budget usage and cache statistics.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-smartcontext" }, "license": "MIT" }, { "name": "smartread", "version": "1.1.0", "description": "Intelligent file reading — multiple modes to minimize token usage.", "tags": [ "file", "read", "smart", "tokens" ], "dependencies": [], "tools": [ { "name": "full", "description": "Read entire file (fallback mode)", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "map", "description": "Read file structure only — function/class signatures, no bodies", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "signatures", "description": "Extract only exported function/class signatures", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "imports", "description": "Extract only import/require statements", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "summary", "description": "One-line summary per function/block (name + line count)", "inputSchema": { "type": "object", "properties": { "path": { "type": "string" } }, "required": [ "path" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-smartread" }, "license": "MIT" }, { "name": "symbol", "version": "1.1.1", "description": "Symbol lookup in source files — find, get, bulk, body.", "tags": [ "symbols", "code-intel", "search" ], "dependencies": [], "tools": [ { "name": "find", "description": "Find symbols by name (substring match) in a directory.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Symbol name or substring" }, "dir": { "type": "string", "description": "Directory to search in" } }, "required": [ "name", "dir" ], "additionalProperties": false } }, { "name": "get", "description": "Get exact symbol match with signature.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Exact symbol name" }, "dir": { "type": "string", "description": "Directory to search in" } }, "required": [ "name", "dir" ], "additionalProperties": false } }, { "name": "bulk", "description": "Look up multiple symbols in one call.", "inputSchema": { "type": "object", "properties": { "names": { "type": "array", "items": { "type": "string" }, "description": "Symbol names to look up" }, "dir": { "type": "string", "description": "Directory to search in" } }, "required": [ "names", "dir" ], "additionalProperties": false } }, { "name": "body", "description": "Read the body of a symbol (lines startLine to endLine).", "inputSchema": { "type": "object", "properties": { "file": { "type": "string", "description": "Absolute file path" }, "startLine": { "type": "number", "description": "Start line (1-based)" }, "endLine": { "type": "number", "description": "End line (inclusive)" } }, "required": [ "file", "startLine", "endLine" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-symbol" }, "license": "MIT" }, { "name": "task", "version": "1.1.0", "description": "Task management for multi-agent workflows — create tasks, assign to agents, track status, mark complete.", "tags": [ "task", "workflow", "agent", "orchestration", "multi-agent" ], "dependencies": [], "tools": [ { "name": "create", "description": "Create a task with a title, description, and priority level.", "inputSchema": { "type": "object", "properties": { "title": { "type": "string", "description": "Short title of the task" }, "description": { "type": "string", "description": "Detailed description of what the task entails" }, "priority": { "type": "number", "description": "Priority level (1 = highest, higher numbers = lower priority)" } }, "required": [ "title", "description" ], "additionalProperties": false } }, { "name": "assign", "description": "Assign a task to an agent by task ID and agent ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Task ID to assign" }, "agentId": { "type": "string", "description": "ID of the agent to assign the task to" } }, "required": [ "id", "agentId" ], "additionalProperties": false } }, { "name": "status", "description": "Get task status and details by ID, or list all tasks filtered by status.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Task ID to retrieve (returns single task)" }, "status": { "type": "string", "enum": [ "pending", "assigned", "running", "done", "failed" ], "description": "Filter tasks by status (returns list)" } }, "additionalProperties": false } }, { "name": "complete", "description": "Mark a task as complete with an optional result payload.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Task ID to mark as complete" }, "result": { "type": "string", "description": "Optional result data or summary from the task execution" } }, "required": [ "id" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-task" }, "license": "MIT" }, { "name": "textsearch", "version": "1.1.0", "description": "Text search and replace across files — regex search, multi-file replace, grouped results.", "tags": [ "search", "text", "regex", "replace", "refactoring" ], "dependencies": [], "tools": [ { "name": "search", "description": "Search for a text pattern across files in a directory. Returns matches with file, line number, and context.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to search in" }, "pattern": { "type": "string", "description": "Text pattern to search for (plain text)" }, "glob": { "type": "string", "description": "File glob filter (e.g. *.ts). Default: all supported files" }, "maxResults": { "type": "number", "description": "Max results to return (default 50)" } }, "required": [ "dir", "pattern" ], "additionalProperties": false } }, { "name": "regex", "description": "Search for a regex pattern across files. Supports capture groups.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to search in" }, "pattern": { "type": "string", "description": "JavaScript regex pattern (without flags)" }, "flags": { "type": "string", "description": "Regex flags (default: 'i')" }, "glob": { "type": "string", "description": "File glob filter" }, "maxResults": { "type": "number", "description": "Max results (default 50)" } }, "required": [ "dir", "pattern" ], "additionalProperties": false } }, { "name": "replace", "description": "Search and replace text across multiple files. Returns preview of changes without applying by default.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to search in" }, "pattern": { "type": "string", "description": "Search pattern (text or regex)" }, "replacement": { "type": "string", "description": "Replacement string (supports $1, $2 for regex captures)" }, "isRegex": { "type": "boolean", "description": "Treat pattern as regex (default false)" }, "glob": { "type": "string", "description": "File glob filter" }, "apply": { "type": "boolean", "description": "Actually apply changes (default false = dry run)" } }, "required": [ "dir", "pattern", "replacement" ], "additionalProperties": false } }, { "name": "grouped", "description": "Search and group results by file, showing match count per file.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Root directory to search in" }, "pattern": { "type": "string", "description": "Search pattern" }, "isRegex": { "type": "boolean", "description": "Treat pattern as regex (default false)" }, "glob": { "type": "string", "description": "File glob filter" } }, "required": [ "dir", "pattern" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-textsearch" }, "license": "MIT" }, { "name": "thinking", "version": "1.1.0", "description": "Structured reasoning chains — think step by step, branch alternatives, revise conclusions, summarize.", "tags": [ "thinking", "reasoning", "chain-of-thought", "analysis" ], "dependencies": [], "tools": [ { "name": "think", "description": "Add a reasoning step to the current chain. Each step has a thought and optional confidence score.", "inputSchema": { "type": "object", "properties": { "thought": { "type": "string", "description": "The reasoning step content" }, "confidence": { "type": "number", "description": "Confidence level 0-1 (optional)" }, "chainId": { "type": "string", "description": "Chain ID to append to (default: current chain)" } }, "required": [ "thought" ], "additionalProperties": false } }, { "name": "branch", "description": "Create a reasoning branch — explore an alternative line of thinking from the current point.", "inputSchema": { "type": "object", "properties": { "label": { "type": "string", "description": "Branch label (e.g. 'Option A', 'If we assume...')" }, "thought": { "type": "string", "description": "First thought in this branch" }, "chainId": { "type": "string", "description": "Chain to branch from" } }, "required": [ "label", "thought" ], "additionalProperties": false } }, { "name": "revise", "description": "Revise a previous reasoning step with new information. Keeps the original for audit trail.", "inputSchema": { "type": "object", "properties": { "stepIndex": { "type": "number", "description": "Index of step to revise (0-based)" }, "revision": { "type": "string", "description": "Revised thought" }, "reason": { "type": "string", "description": "Why this revision" }, "chainId": { "type": "string", "description": "Chain ID" } }, "required": [ "stepIndex", "revision", "reason" ], "additionalProperties": false } }, { "name": "summarize", "description": "Summarize the current reasoning chain into a structured conclusion.", "inputSchema": { "type": "object", "properties": { "chainId": { "type": "string", "description": "Chain to summarize (default: current)" } }, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-thinking" }, "license": "MIT" }, { "name": "tokenbudget", "version": "1.1.0", "description": "Token budget management — estimate and optimize token usage for AI agents.", "tags": [ "tokens", "budget", "optimize", "estimate" ], "dependencies": [], "tools": [ { "name": "estimate", "description": "Estimate token count for text (chars/4 heuristic, adjusted for code vs prose).", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "Text to estimate" }, "path": { "type": "string", "description": "File path to read and estimate" } }, "additionalProperties": false } }, { "name": "analyze", "description": "Analyze token cost of a directory recursively, per-file breakdown sorted by cost.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Directory to analyze" }, "maxFiles": { "type": "number", "description": "Max files to analyze (default 50)" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "fill", "description": "Given a token budget and file list, select files that fit using compression levels to maximize info.", "inputSchema": { "type": "object", "properties": { "budget": { "type": "number", "description": "Token budget" }, "files": { "type": "array", "items": { "type": "string" }, "description": "List of file paths" }, "mode": { "type": "string", "enum": [ "signatures", "map", "full" ], "description": "Read mode (default: signatures)" } }, "required": [ "budget", "files" ], "additionalProperties": false } }, { "name": "optimize", "description": "Suggest how to read a set of files within a budget.", "inputSchema": { "type": "object", "properties": { "budget": { "type": "number", "description": "Token budget" }, "dir": { "type": "string", "description": "Directory to optimize" } }, "required": [ "budget", "dir" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-tokenbudget" }, "license": "MIT" }, { "name": "treesitter", "version": "1.1.1", "description": "Regex-based code indexer for TypeScript/JavaScript — parses symbols, imports, exports.", "tags": [ "ast", "parser", "symbols", "typescript" ], "dependencies": [], "tools": [ { "name": "index", "description": "Index a directory: parse all TS/JS files and store symbols in memory.", "inputSchema": { "type": "object", "properties": { "dir": { "type": "string", "description": "Absolute path to directory to index" } }, "required": [ "dir" ], "additionalProperties": false } }, { "name": "reindex", "description": "Re-index a single file.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute path to file" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "status", "description": "Return index status: file count, symbol count, languages.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } }, { "name": "cleanup", "description": "Clear the entire index.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } }, { "name": "langs", "description": "List supported languages.", "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-treesitter" }, "license": "MIT" }, { "name": "validate", "version": "1.1.0", "description": "Validate data — JSON syntax, JSON Schema compliance, TypeScript type checking, lint rules.", "tags": [ "validate", "json", "schema", "types", "lint" ], "dependencies": [], "tools": [ { "name": "json", "description": "Validate JSON syntax — check if a string is valid JSON and report parse errors.", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "The string to validate as JSON" } }, "required": [ "text" ], "additionalProperties": false } }, { "name": "schema", "description": "Validate data against a JSON Schema (subset: type, required, properties, items).", "inputSchema": { "type": "object", "properties": { "data": { "type": "string", "description": "JSON string of the data to validate" }, "schema": { "type": "object", "description": "JSON Schema object (type, required, properties, items supported)" } }, "required": [ "data", "schema" ], "additionalProperties": false } }, { "name": "types", "description": "Check TypeScript type annotations in a file — find `any`, missing return types, implicit any.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute path to the TypeScript file to analyse" } }, "required": [ "path" ], "additionalProperties": false } }, { "name": "lint", "description": "Apply simple lint rules to code — unused imports, console.log, TODO/FIXME count, debugger statements.", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Absolute path to the source file to lint" } }, "required": [ "path" ], "additionalProperties": false } } ], "source": { "type": "npm", "package": "@focus-mcp/brick-validate" }, "license": "MIT" } ] }