Skip to main content
Glama
copilot-instructions.md7.9 kB
# DocuMCP AI Coding Agent Instructions DocuMCP is an intelligent MCP server for GitHub Pages documentation deployment with 45+ tools, Knowledge Graph memory system, and AST-based code analysis. ## Architecture Essentials ### MCP Server Design (src/index.ts) - **Stateless operation**: Each tool analyzes current state; no persistent session data - **Resource storage**: Temporary session context in `resourceStore` Map with URIs like `documcp://analysis/{id}` - **Response format**: ALL tools MUST use `formatMCPResponse()` from `src/types/api.ts` returning `MCPToolResponse` - **Memory integration**: Tools auto-store results in JSONL (`.documcp/memory/`) and query historical data ### Tool Implementation Pattern Every tool follows this structure: 1. Zod schema for input validation (e.g., `inputSchema.parse()`) 2. Business logic with error handling 3. Return via `formatMCPResponse({ success, data, metadata, recommendations?, nextSteps? })` 4. Store result as resource: `storeResourceFromToolResult(result, 'analysis', analysis.id)` **Example** (see `src/tools/analyze-repository.ts`): ```typescript const inputSchema = z.object({ path: z.string(), depth: z.enum(["quick", "standard", "deep"]).optional(), }); export async function analyzeRepository( args: unknown, ): Promise<MCPToolResponse> { const input = inputSchema.parse(args); // ... logic ... return formatMCPResponse({ success: true, data: analysis, metadata: { toolVersion, executionTime, timestamp }, }); } ``` ### Knowledge Graph Memory (src/memory/) - **Entities**: Project, User, Configuration, Technology, CodeFile, DocumentationSection (see `src/memory/schemas.ts`) - **Relationships**: `project_uses_technology`, `project_deployed_with`, `similar_to`, `documents`, etc. - **Storage**: `.documcp/memory/knowledge-graph-entities.jsonl` and `knowledge-graph-relationships.jsonl` - **Integration**: Use `createOrUpdateProject()`, `getProjectContext()`, `trackDeployment()` from `src/memory/kg-integration.ts` **analyze_repository enhancement**: Retrieves project history before analysis, shows previous analysis count, similar projects ## Development Workflows ### Essential Commands ```bash npm run build # Compile TypeScript → dist/ npm run dev # Development watch mode with tsx npm test # Run Jest test suite npm run test:coverage # Coverage report (80% threshold) npm run build:inspect # Launch MCP Inspector for interactive testing npm run ci # Full CI pipeline: typecheck + lint + test + build make qa # Quality assurance: lint + types + test + coverage ``` ### Testing Strategy - **Location**: `tests/` mirroring `src/` structure - **Coverage**: 80% global (branches/functions/lines), 60% for `recommend-ssg.ts` (complex logic) - **Excluded**: Experimental memory features, `src/index.ts` entry point - **Pattern**: Use `formatMCPResponse()` for consistent response validation - **Integration**: Multi-tool workflow tests in `tests/integration/` ### MCP Inspector Workflow 1. `npm run build:inspect` opens browser at `http://localhost:5173` 2. Click "Connect" to attach to server 3. Test tools with custom parameters interactively 4. Verify resources/prompts without full integration ## Project-Specific Conventions ### ESM Module Requirements - **ALL imports** must end with `.js` (even for `.ts` files): `import { foo } from './utils.js'` - Use `import type` for type-only imports: `import type { MyType } from './types.js'` - File URLs: `fileURLToPath(import.meta.url)` and `dirname()` ### Path & Permission Handling - **Security**: Use `isPathAllowed(path, allowedRoots)` from `src/utils/permission-checker.ts` before file operations - **Async FS**: Always use `fs.promises` API, never sync methods - **Cross-platform**: Use `path` module for joining/resolving ### Git Integration - Use `simple-git` library for repository operations - Handle missing `.git` directories gracefully (check `hasGit` flag) - Always validate repo state before analysis ### Diataxis Framework Documentation structured as: - **Tutorials**: Learning-oriented (getting started) - **How-To Guides**: Problem-solving (specific tasks) - **Reference**: Information-oriented (API docs) - **Explanation**: Understanding-oriented (architecture, concepts) Tools like `setup-structure` and `populate-content` enforce this structure. ## Critical Implementation Details ### Phase 3: AST-Based Code Analysis - **AST Parser** (`src/utils/ast-analyzer.ts`): Multi-language support via Tree-sitter (TypeScript, Python, Go, Rust, Java, Ruby, Bash) - **Drift Detection** (`src/utils/drift-detector.ts`): Snapshot-based comparison, categorizes changes (breaking/major/minor/patch) - **Sync Tool** (`src/tools/sync-code-to-docs.ts`): Modes: detect/preview/apply/auto, confidence threshold (default 0.8) - **Content Generator** (`src/tools/generate-contextual-content.ts`): Creates Diataxis-compliant docs from actual code structure **Example drift detection**: ```typescript // Detects function signature changes, new/removed classes, breaking changes const drift = await detectDrift({ projectPath, docsPath, snapshotDir }); drift.affectedFiles.forEach((f) => console.log(f.driftType, f.severity)); ``` ### Error Handling Pattern ```typescript try { // tool logic return formatMCPResponse({ success: true, data: result, metadata }); } catch (error) { return formatMCPResponse({ success: false, error: { code: "TOOL_ERROR", message: error.message, resolution: "Check inputs and try again", }, metadata, }); } ``` ### Adding New Tools Checklist 1. Create `src/tools/my-tool.ts` with Zod schema and logic 2. Export tool function returning `MCPToolResponse` 3. Add to `TOOLS` array in `src/index.ts` with name, description, inputSchema 4. Add handler in `CallToolRequestSchema` switch case 5. Store result: `storeResourceFromToolResult(result, 'type', id)` 6. Create tests: `tests/tools/my-tool.test.ts` 7. Run `npm run ci` to validate ## Key Integration Points ### Memory Query Patterns ```typescript // Query similar projects by analysis results const similar = await getSimilarProjects(analysisResult, limit); // Get project insights with historical context const insights = await getProjectInsights(projectPath); // Export/import memory for backup await exportMemories({ outputPath: "./backup.json" }); await importMemories({ inputPath: "./backup.json" }); ``` ### Resource Storage Pattern ```typescript // Tools create resources for cross-tool reference resourceStore.set(`documcp://analysis/${id}`, { uri: `documcp://analysis/${id}`, name: `Repository Analysis ${id}`, mimeType: "application/json", text: JSON.stringify(result, null, 2), }); ``` ### ADR References - **ADR-001**: TypeScript MCP SDK chosen over Python/Go for ecosystem maturity - **ADR-002**: Multi-layered repository analysis (structure + dependencies + documentation) - **ADR-003**: Algorithmic SSG recommendation with confidence scoring - **ADR-006**: Consistent tool API design with Zod validation - **ADR-010**: Resource pattern redesign for session-based storage Full ADRs: `docs/adrs/` ## Common Pitfalls - ❌ Forgetting `.js` extension in imports → Module resolution fails - ❌ Using `formatMCPResponse()` incorrectly → Response validation errors - ❌ Missing Zod schema validation → Runtime type errors - ❌ Synchronous file operations → Blocking operations - ❌ Not checking path permissions → Security vulnerabilities - ❌ Returning raw objects instead of `MCPToolResponse` → Protocol violations ## Quick Reference **Node.js**: ≥20.0.0 | **Module**: ESM | **Test Framework**: Jest (ts-jest) | **Storage**: `.documcp/memory/` (JSONL) **MCP Inspector**: `npm run build:inspect` | **Full test suite**: `npm run ci` | **Docs**: `docs/` (Docusaurus)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tosin2013/documcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server