forge-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/worktree-create.sh +64 -0
- package/.claude/hooks/worktree-remove.sh +57 -0
- package/.claude/settings.local.json +29 -0
- package/.forge/knowledge/conventions.yaml +1 -0
- package/.forge/knowledge/decisions.yaml +1 -0
- package/.forge/knowledge/gotchas.yaml +1 -0
- package/.forge/knowledge/patterns.yaml +1 -0
- package/.forge/manifest.yaml +6 -0
- package/CLAUDE.md +144 -0
- package/bin/setup-forge.sh +132 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +553 -0
- package/dist/cli.js.map +1 -0
- package/dist/context/codebase.d.ts +57 -0
- package/dist/context/codebase.d.ts.map +1 -0
- package/dist/context/codebase.js +301 -0
- package/dist/context/codebase.js.map +1 -0
- package/dist/context/injector.d.ts +147 -0
- package/dist/context/injector.d.ts.map +1 -0
- package/dist/context/injector.js +533 -0
- package/dist/context/injector.js.map +1 -0
- package/dist/context/memory.d.ts +32 -0
- package/dist/context/memory.d.ts.map +1 -0
- package/dist/context/memory.js +140 -0
- package/dist/context/memory.js.map +1 -0
- package/dist/context/session-index.d.ts +54 -0
- package/dist/context/session-index.d.ts.map +1 -0
- package/dist/context/session-index.js +265 -0
- package/dist/context/session-index.js.map +1 -0
- package/dist/context/session.d.ts +42 -0
- package/dist/context/session.d.ts.map +1 -0
- package/dist/context/session.js +121 -0
- package/dist/context/session.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/ingestion/chunker.d.ts +19 -0
- package/dist/ingestion/chunker.d.ts.map +1 -0
- package/dist/ingestion/chunker.js +189 -0
- package/dist/ingestion/chunker.js.map +1 -0
- package/dist/ingestion/embedder.d.ts +45 -0
- package/dist/ingestion/embedder.d.ts.map +1 -0
- package/dist/ingestion/embedder.js +152 -0
- package/dist/ingestion/embedder.js.map +1 -0
- package/dist/ingestion/git-analyzer.d.ts +77 -0
- package/dist/ingestion/git-analyzer.d.ts.map +1 -0
- package/dist/ingestion/git-analyzer.js +437 -0
- package/dist/ingestion/git-analyzer.js.map +1 -0
- package/dist/ingestion/indexer.d.ts +79 -0
- package/dist/ingestion/indexer.d.ts.map +1 -0
- package/dist/ingestion/indexer.js +766 -0
- package/dist/ingestion/indexer.js.map +1 -0
- package/dist/ingestion/markdown-chunker.d.ts +19 -0
- package/dist/ingestion/markdown-chunker.d.ts.map +1 -0
- package/dist/ingestion/markdown-chunker.js +243 -0
- package/dist/ingestion/markdown-chunker.js.map +1 -0
- package/dist/ingestion/markdown-knowledge.d.ts +21 -0
- package/dist/ingestion/markdown-knowledge.d.ts.map +1 -0
- package/dist/ingestion/markdown-knowledge.js +129 -0
- package/dist/ingestion/markdown-knowledge.js.map +1 -0
- package/dist/ingestion/parser.d.ts +20 -0
- package/dist/ingestion/parser.d.ts.map +1 -0
- package/dist/ingestion/parser.js +429 -0
- package/dist/ingestion/parser.js.map +1 -0
- package/dist/ingestion/watcher.d.ts +28 -0
- package/dist/ingestion/watcher.d.ts.map +1 -0
- package/dist/ingestion/watcher.js +147 -0
- package/dist/ingestion/watcher.js.map +1 -0
- package/dist/knowledge/hydrator.d.ts +37 -0
- package/dist/knowledge/hydrator.d.ts.map +1 -0
- package/dist/knowledge/hydrator.js +220 -0
- package/dist/knowledge/hydrator.js.map +1 -0
- package/dist/knowledge/registry.d.ts +129 -0
- package/dist/knowledge/registry.d.ts.map +1 -0
- package/dist/knowledge/registry.js +361 -0
- package/dist/knowledge/registry.js.map +1 -0
- package/dist/knowledge/search.d.ts +114 -0
- package/dist/knowledge/search.d.ts.map +1 -0
- package/dist/knowledge/search.js +428 -0
- package/dist/knowledge/search.js.map +1 -0
- package/dist/knowledge/store.d.ts +76 -0
- package/dist/knowledge/store.d.ts.map +1 -0
- package/dist/knowledge/store.js +230 -0
- package/dist/knowledge/store.js.map +1 -0
- package/dist/learning/confidence.d.ts +30 -0
- package/dist/learning/confidence.d.ts.map +1 -0
- package/dist/learning/confidence.js +165 -0
- package/dist/learning/confidence.js.map +1 -0
- package/dist/learning/patterns.d.ts +52 -0
- package/dist/learning/patterns.d.ts.map +1 -0
- package/dist/learning/patterns.js +290 -0
- package/dist/learning/patterns.js.map +1 -0
- package/dist/learning/trajectory.d.ts +55 -0
- package/dist/learning/trajectory.d.ts.map +1 -0
- package/dist/learning/trajectory.js +200 -0
- package/dist/learning/trajectory.js.map +1 -0
- package/dist/memory/memory-compat.d.ts +100 -0
- package/dist/memory/memory-compat.d.ts.map +1 -0
- package/dist/memory/memory-compat.js +146 -0
- package/dist/memory/memory-compat.js.map +1 -0
- package/dist/memory/observation-store.d.ts +57 -0
- package/dist/memory/observation-store.d.ts.map +1 -0
- package/dist/memory/observation-store.js +154 -0
- package/dist/memory/observation-store.js.map +1 -0
- package/dist/memory/session-tracker.d.ts +81 -0
- package/dist/memory/session-tracker.d.ts.map +1 -0
- package/dist/memory/session-tracker.js +262 -0
- package/dist/memory/session-tracker.js.map +1 -0
- package/dist/pipeline/engine.d.ts +179 -0
- package/dist/pipeline/engine.d.ts.map +1 -0
- package/dist/pipeline/engine.js +691 -0
- package/dist/pipeline/engine.js.map +1 -0
- package/dist/pipeline/events.d.ts +54 -0
- package/dist/pipeline/events.d.ts.map +1 -0
- package/dist/pipeline/events.js +157 -0
- package/dist/pipeline/events.js.map +1 -0
- package/dist/pipeline/parallel.d.ts +83 -0
- package/dist/pipeline/parallel.d.ts.map +1 -0
- package/dist/pipeline/parallel.js +277 -0
- package/dist/pipeline/parallel.js.map +1 -0
- package/dist/pipeline/state-machine.d.ts +65 -0
- package/dist/pipeline/state-machine.d.ts.map +1 -0
- package/dist/pipeline/state-machine.js +176 -0
- package/dist/pipeline/state-machine.js.map +1 -0
- package/dist/query/graph-queries.d.ts +84 -0
- package/dist/query/graph-queries.d.ts.map +1 -0
- package/dist/query/graph-queries.js +216 -0
- package/dist/query/graph-queries.js.map +1 -0
- package/dist/query/hybrid-search.d.ts +34 -0
- package/dist/query/hybrid-search.d.ts.map +1 -0
- package/dist/query/hybrid-search.js +263 -0
- package/dist/query/hybrid-search.js.map +1 -0
- package/dist/query/intent-detector.d.ts +35 -0
- package/dist/query/intent-detector.d.ts.map +1 -0
- package/dist/query/intent-detector.js +115 -0
- package/dist/query/intent-detector.js.map +1 -0
- package/dist/query/ranking.d.ts +57 -0
- package/dist/query/ranking.d.ts.map +1 -0
- package/dist/query/ranking.js +109 -0
- package/dist/query/ranking.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +291 -0
- package/dist/server.js.map +1 -0
- package/dist/storage/falkordb-store.d.ts +73 -0
- package/dist/storage/falkordb-store.d.ts.map +1 -0
- package/dist/storage/falkordb-store.js +346 -0
- package/dist/storage/falkordb-store.js.map +1 -0
- package/dist/storage/file-cache.d.ts +32 -0
- package/dist/storage/file-cache.d.ts.map +1 -0
- package/dist/storage/file-cache.js +115 -0
- package/dist/storage/file-cache.js.map +1 -0
- package/dist/storage/interfaces.d.ts +151 -0
- package/dist/storage/interfaces.d.ts.map +1 -0
- package/dist/storage/interfaces.js +7 -0
- package/dist/storage/interfaces.js.map +1 -0
- package/dist/storage/qdrant-store.d.ts +110 -0
- package/dist/storage/qdrant-store.d.ts.map +1 -0
- package/dist/storage/qdrant-store.js +467 -0
- package/dist/storage/qdrant-store.js.map +1 -0
- package/dist/storage/schema.d.ts +4 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +136 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/storage/sqlite.d.ts +35 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +132 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/tools/collaboration-tools.d.ts +111 -0
- package/dist/tools/collaboration-tools.d.ts.map +1 -0
- package/dist/tools/collaboration-tools.js +174 -0
- package/dist/tools/collaboration-tools.js.map +1 -0
- package/dist/tools/context-tools.d.ts +293 -0
- package/dist/tools/context-tools.d.ts.map +1 -0
- package/dist/tools/context-tools.js +437 -0
- package/dist/tools/context-tools.js.map +1 -0
- package/dist/tools/graph-tools.d.ts +129 -0
- package/dist/tools/graph-tools.d.ts.map +1 -0
- package/dist/tools/graph-tools.js +237 -0
- package/dist/tools/graph-tools.js.map +1 -0
- package/dist/tools/ingestion-tools.d.ts +96 -0
- package/dist/tools/ingestion-tools.d.ts.map +1 -0
- package/dist/tools/ingestion-tools.js +90 -0
- package/dist/tools/ingestion-tools.js.map +1 -0
- package/dist/tools/learning-tools.d.ts +168 -0
- package/dist/tools/learning-tools.d.ts.map +1 -0
- package/dist/tools/learning-tools.js +158 -0
- package/dist/tools/learning-tools.js.map +1 -0
- package/dist/tools/memory-tools.d.ts +183 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +197 -0
- package/dist/tools/memory-tools.js.map +1 -0
- package/dist/tools/phase-tools.d.ts +954 -0
- package/dist/tools/phase-tools.d.ts.map +1 -0
- package/dist/tools/phase-tools.js +1215 -0
- package/dist/tools/phase-tools.js.map +1 -0
- package/dist/tools/pipeline-tools.d.ts +140 -0
- package/dist/tools/pipeline-tools.d.ts.map +1 -0
- package/dist/tools/pipeline-tools.js +162 -0
- package/dist/tools/pipeline-tools.js.map +1 -0
- package/dist/tools/registration-tools.d.ts +220 -0
- package/dist/tools/registration-tools.d.ts.map +1 -0
- package/dist/tools/registration-tools.js +391 -0
- package/dist/tools/registration-tools.js.map +1 -0
- package/dist/util/circuit-breaker.d.ts +75 -0
- package/dist/util/circuit-breaker.d.ts.map +1 -0
- package/dist/util/circuit-breaker.js +159 -0
- package/dist/util/circuit-breaker.js.map +1 -0
- package/dist/util/config.d.ts +23 -0
- package/dist/util/config.d.ts.map +1 -0
- package/dist/util/config.js +164 -0
- package/dist/util/config.js.map +1 -0
- package/dist/util/logger.d.ts +13 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +45 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/token-counter.d.ts +24 -0
- package/dist/util/token-counter.d.ts.map +1 -0
- package/dist/util/token-counter.js +48 -0
- package/dist/util/token-counter.js.map +1 -0
- package/dist/util/types.d.ts +525 -0
- package/dist/util/types.d.ts.map +1 -0
- package/dist/util/types.js +5 -0
- package/dist/util/types.js.map +1 -0
- package/docker-compose.yml +20 -0
- package/docs/plans/2026-02-27-swarm-coordination/architecture.md +203 -0
- package/docs/plans/2026-02-27-swarm-coordination/vision.md +57 -0
- package/docs/plans/completed/2026-02-26-forge-plugin-bundling/architecture.md +1 -0
- package/docs/plans/completed/2026-02-26-forge-plugin-bundling/vision.md +300 -0
- package/docs/plans/completed/2026-02-27-forge-swarm-learning/architecture.md +480 -0
- package/docs/plans/completed/2026-02-27-forge-swarm-learning/verification-checklist.md +462 -0
- package/docs/plans/completed/2026-02-27-git-history-atlassian/git-jira-plan.md +181 -0
- package/package.json +39 -0
- package/plugin/.claude-plugin/plugin.json +8 -0
- package/plugin/.mcp.json +15 -0
- package/plugin/README.md +134 -0
- package/plugin/agents/architect.md +367 -0
- package/plugin/agents/backend-specialist.md +263 -0
- package/plugin/agents/brainstormer.md +122 -0
- package/plugin/agents/data-specialist.md +266 -0
- package/plugin/agents/designer.md +408 -0
- package/plugin/agents/frontend-specialist.md +241 -0
- package/plugin/agents/inspector.md +406 -0
- package/plugin/agents/knowledge-keeper.md +443 -0
- package/plugin/agents/platform-engineer.md +326 -0
- package/plugin/agents/product-manager.md +268 -0
- package/plugin/agents/product-owner.md +438 -0
- package/plugin/agents/pulse-checker.md +73 -0
- package/plugin/agents/qa-strategist.md +500 -0
- package/plugin/agents/self-improver.md +310 -0
- package/plugin/agents/strategist.md +360 -0
- package/plugin/agents/supervisor.md +380 -0
- package/plugin/commands/brainstorm.md +25 -0
- package/plugin/commands/forge.md +88 -0
- package/plugin/docs/atlassian-integration.md +110 -0
- package/plugin/docs/workflow.md +126 -0
- package/plugin/skills/agent-development/.skillfish.json +10 -0
- package/plugin/skills/agent-development/SKILL.md +415 -0
- package/plugin/skills/agent-development/examples/agent-creation-prompt.md +238 -0
- package/plugin/skills/agent-development/examples/complete-agent-examples.md +427 -0
- package/plugin/skills/agent-development/references/agent-creation-system-prompt.md +207 -0
- package/plugin/skills/agent-development/references/system-prompt-design.md +411 -0
- package/plugin/skills/agent-development/references/triggering-examples.md +491 -0
- package/plugin/skills/agent-development/scripts/validate-agent.sh +217 -0
- package/plugin/skills/agent-handoff/SKILL.md +335 -0
- package/plugin/skills/anti-stub/SKILL.md +317 -0
- package/plugin/skills/brainstorm/SKILL.md +31 -0
- package/plugin/skills/debugging/SKILL.md +276 -0
- package/plugin/skills/fix/SKILL.md +62 -0
- package/plugin/skills/frontend-design/.skillfish.json +10 -0
- package/plugin/skills/frontend-design/SKILL.md +42 -0
- package/plugin/skills/gotchas/SKILL.md +61 -0
- package/plugin/skills/graph-orchestrator/SKILL.md +38 -0
- package/plugin/skills/history/SKILL.md +58 -0
- package/plugin/skills/impact/SKILL.md +59 -0
- package/plugin/skills/implementation-execution/SKILL.md +291 -0
- package/plugin/skills/index-repo/SKILL.md +55 -0
- package/plugin/skills/interviewing/SKILL.md +225 -0
- package/plugin/skills/knowledge-curation/SKILL.md +393 -0
- package/plugin/skills/learn/SKILL.md +69 -0
- package/plugin/skills/mcp-integration/.skillfish.json +10 -0
- package/plugin/skills/mcp-integration/SKILL.md +554 -0
- package/plugin/skills/mcp-integration/examples/http-server.json +20 -0
- package/plugin/skills/mcp-integration/examples/sse-server.json +19 -0
- package/plugin/skills/mcp-integration/examples/stdio-server.json +26 -0
- package/plugin/skills/mcp-integration/references/authentication.md +549 -0
- package/plugin/skills/mcp-integration/references/server-types.md +536 -0
- package/plugin/skills/mcp-integration/references/tool-usage.md +538 -0
- package/plugin/skills/nestjs/.skillfish.json +10 -0
- package/plugin/skills/nestjs/SKILL.md +669 -0
- package/plugin/skills/nestjs/drizzle-reference.md +1894 -0
- package/plugin/skills/nestjs/reference.md +1447 -0
- package/plugin/skills/nestjs/workflow-optimization.md +229 -0
- package/plugin/skills/parallel-dispatch/SKILL.md +308 -0
- package/plugin/skills/project-discovery/SKILL.md +304 -0
- package/plugin/skills/search/SKILL.md +56 -0
- package/plugin/skills/security-audit/SKILL.md +362 -0
- package/plugin/skills/skill-development/.skillfish.json +10 -0
- package/plugin/skills/skill-development/SKILL.md +637 -0
- package/plugin/skills/skill-development/references/skill-creator-original.md +209 -0
- package/plugin/skills/tdd/SKILL.md +273 -0
- package/plugin/skills/terminal-presentation/SKILL.md +395 -0
- package/plugin/skills/test-strategy/SKILL.md +365 -0
- package/plugin/skills/verification-protocol/SKILL.md +256 -0
- package/plugin/skills/visual-explainer/CHANGELOG.md +97 -0
- package/plugin/skills/visual-explainer/LICENSE +21 -0
- package/plugin/skills/visual-explainer/README.md +137 -0
- package/plugin/skills/visual-explainer/SKILL.md +352 -0
- package/plugin/skills/visual-explainer/banner.png +0 -0
- package/plugin/skills/visual-explainer/package.json +11 -0
- package/plugin/skills/visual-explainer/prompts/diff-review.md +68 -0
- package/plugin/skills/visual-explainer/prompts/fact-check.md +63 -0
- package/plugin/skills/visual-explainer/prompts/generate-slides.md +18 -0
- package/plugin/skills/visual-explainer/prompts/generate-web-diagram.md +10 -0
- package/plugin/skills/visual-explainer/prompts/plan-review.md +86 -0
- package/plugin/skills/visual-explainer/prompts/project-recap.md +61 -0
- package/plugin/skills/visual-explainer/references/css-patterns.md +1188 -0
- package/plugin/skills/visual-explainer/references/libraries.md +470 -0
- package/plugin/skills/visual-explainer/references/responsive-nav.md +212 -0
- package/plugin/skills/visual-explainer/references/slide-patterns.md +1403 -0
- package/plugin/skills/visual-explainer/templates/architecture.html +596 -0
- package/plugin/skills/visual-explainer/templates/data-table.html +540 -0
- package/plugin/skills/visual-explainer/templates/mermaid-flowchart.html +435 -0
- package/plugin/skills/visual-explainer/templates/slide-deck.html +913 -0
- package/src/cli.ts +655 -0
- package/src/context/.gitkeep +0 -0
- package/src/context/codebase.ts +393 -0
- package/src/context/injector.ts +797 -0
- package/src/context/memory.ts +187 -0
- package/src/context/session-index.ts +327 -0
- package/src/context/session.ts +152 -0
- package/src/index.ts +47 -0
- package/src/ingestion/.gitkeep +0 -0
- package/src/ingestion/chunker.ts +277 -0
- package/src/ingestion/embedder.ts +167 -0
- package/src/ingestion/git-analyzer.ts +545 -0
- package/src/ingestion/indexer.ts +984 -0
- package/src/ingestion/markdown-chunker.ts +337 -0
- package/src/ingestion/markdown-knowledge.ts +175 -0
- package/src/ingestion/parser.ts +475 -0
- package/src/ingestion/watcher.ts +182 -0
- package/src/knowledge/.gitkeep +0 -0
- package/src/knowledge/hydrator.ts +246 -0
- package/src/knowledge/registry.ts +463 -0
- package/src/knowledge/search.ts +565 -0
- package/src/knowledge/store.ts +262 -0
- package/src/learning/.gitkeep +0 -0
- package/src/learning/confidence.ts +193 -0
- package/src/learning/patterns.ts +360 -0
- package/src/learning/trajectory.ts +268 -0
- package/src/memory/.gitkeep +0 -0
- package/src/memory/memory-compat.ts +233 -0
- package/src/memory/observation-store.ts +224 -0
- package/src/memory/session-tracker.ts +332 -0
- package/src/pipeline/.gitkeep +0 -0
- package/src/pipeline/engine.ts +1139 -0
- package/src/pipeline/events.ts +253 -0
- package/src/pipeline/parallel.ts +394 -0
- package/src/pipeline/state-machine.ts +199 -0
- package/src/query/.gitkeep +0 -0
- package/src/query/graph-queries.ts +262 -0
- package/src/query/hybrid-search.ts +337 -0
- package/src/query/intent-detector.ts +131 -0
- package/src/query/ranking.ts +161 -0
- package/src/server.ts +352 -0
- package/src/storage/.gitkeep +0 -0
- package/src/storage/falkordb-store.ts +388 -0
- package/src/storage/file-cache.ts +141 -0
- package/src/storage/interfaces.ts +201 -0
- package/src/storage/qdrant-store.ts +557 -0
- package/src/storage/schema.ts +139 -0
- package/src/storage/sqlite.ts +168 -0
- package/src/tools/.gitkeep +0 -0
- package/src/tools/collaboration-tools.ts +208 -0
- package/src/tools/context-tools.ts +493 -0
- package/src/tools/graph-tools.ts +295 -0
- package/src/tools/ingestion-tools.ts +122 -0
- package/src/tools/learning-tools.ts +181 -0
- package/src/tools/memory-tools.ts +234 -0
- package/src/tools/phase-tools.ts +1452 -0
- package/src/tools/pipeline-tools.ts +188 -0
- package/src/tools/registration-tools.ts +450 -0
- package/src/util/.gitkeep +0 -0
- package/src/util/circuit-breaker.ts +193 -0
- package/src/util/config.ts +177 -0
- package/src/util/logger.ts +53 -0
- package/src/util/token-counter.ts +52 -0
- package/src/util/types.ts +710 -0
- package/tests/context/.gitkeep +0 -0
- package/tests/integration/.gitkeep +0 -0
- package/tests/knowledge/.gitkeep +0 -0
- package/tests/learning/.gitkeep +0 -0
- package/tests/pipeline/.gitkeep +0 -0
- package/tests/tools/.gitkeep +0 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +10 -0
- package/vscode-extension/.vscodeignore +7 -0
- package/vscode-extension/README.md +43 -0
- package/vscode-extension/out/edge-collector.js +274 -0
- package/vscode-extension/out/edge-collector.js.map +1 -0
- package/vscode-extension/out/extension.js +264 -0
- package/vscode-extension/out/extension.js.map +1 -0
- package/vscode-extension/out/forge-client.js +318 -0
- package/vscode-extension/out/forge-client.js.map +1 -0
- package/vscode-extension/package-lock.json +59 -0
- package/vscode-extension/package.json +71 -0
- package/vscode-extension/src/edge-collector.ts +320 -0
- package/vscode-extension/src/extension.ts +269 -0
- package/vscode-extension/src/forge-client.ts +364 -0
- package/vscode-extension/tsconfig.json +19 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
# MCP Server Types: Deep Dive
|
|
2
|
+
|
|
3
|
+
Complete reference for all MCP server types supported in Claude Code plugins.
|
|
4
|
+
|
|
5
|
+
## stdio (Standard Input/Output)
|
|
6
|
+
|
|
7
|
+
### Overview
|
|
8
|
+
|
|
9
|
+
Execute local MCP servers as child processes with communication via stdin/stdout. Best choice for local tools, custom servers, and NPM packages.
|
|
10
|
+
|
|
11
|
+
### Configuration
|
|
12
|
+
|
|
13
|
+
**Basic:**
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"my-server": {
|
|
17
|
+
"command": "npx",
|
|
18
|
+
"args": ["-y", "my-mcp-server"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**With environment:**
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"my-server": {
|
|
27
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/servers/custom-server",
|
|
28
|
+
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
|
|
29
|
+
"env": {
|
|
30
|
+
"API_KEY": "${MY_API_KEY}",
|
|
31
|
+
"LOG_LEVEL": "debug",
|
|
32
|
+
"DATABASE_URL": "${DB_URL}"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Process Lifecycle
|
|
39
|
+
|
|
40
|
+
1. **Startup**: Claude Code spawns process with `command` and `args`
|
|
41
|
+
2. **Communication**: JSON-RPC messages via stdin/stdout
|
|
42
|
+
3. **Lifecycle**: Process runs for entire Claude Code session
|
|
43
|
+
4. **Shutdown**: Process terminated when Claude Code exits
|
|
44
|
+
|
|
45
|
+
### Use Cases
|
|
46
|
+
|
|
47
|
+
**NPM Packages:**
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"filesystem": {
|
|
51
|
+
"command": "npx",
|
|
52
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Custom Scripts:**
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"custom": {
|
|
61
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/servers/my-server.js",
|
|
62
|
+
"args": ["--verbose"]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Python Servers:**
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"python-server": {
|
|
71
|
+
"command": "python",
|
|
72
|
+
"args": ["-m", "my_mcp_server"],
|
|
73
|
+
"env": {
|
|
74
|
+
"PYTHONUNBUFFERED": "1"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Best Practices
|
|
81
|
+
|
|
82
|
+
1. **Use absolute paths or ${CLAUDE_PLUGIN_ROOT}**
|
|
83
|
+
2. **Set PYTHONUNBUFFERED for Python servers**
|
|
84
|
+
3. **Pass configuration via args or env, not stdin**
|
|
85
|
+
4. **Handle server crashes gracefully**
|
|
86
|
+
5. **Log to stderr, not stdout (stdout is for MCP protocol)**
|
|
87
|
+
|
|
88
|
+
### Troubleshooting
|
|
89
|
+
|
|
90
|
+
**Server won't start:**
|
|
91
|
+
- Check command exists and is executable
|
|
92
|
+
- Verify file paths are correct
|
|
93
|
+
- Check permissions
|
|
94
|
+
- Review `claude --debug` logs
|
|
95
|
+
|
|
96
|
+
**Communication fails:**
|
|
97
|
+
- Ensure server uses stdin/stdout correctly
|
|
98
|
+
- Check for stray print/console.log statements
|
|
99
|
+
- Verify JSON-RPC format
|
|
100
|
+
|
|
101
|
+
## SSE (Server-Sent Events)
|
|
102
|
+
|
|
103
|
+
### Overview
|
|
104
|
+
|
|
105
|
+
Connect to hosted MCP servers via HTTP with server-sent events for streaming. Best for cloud services and OAuth authentication.
|
|
106
|
+
|
|
107
|
+
### Configuration
|
|
108
|
+
|
|
109
|
+
**Basic:**
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"hosted-service": {
|
|
113
|
+
"type": "sse",
|
|
114
|
+
"url": "https://mcp.example.com/sse"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**With headers:**
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"service": {
|
|
123
|
+
"type": "sse",
|
|
124
|
+
"url": "https://mcp.example.com/sse",
|
|
125
|
+
"headers": {
|
|
126
|
+
"X-API-Version": "v1",
|
|
127
|
+
"X-Client-ID": "${CLIENT_ID}"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Connection Lifecycle
|
|
134
|
+
|
|
135
|
+
1. **Initialization**: HTTP connection established to URL
|
|
136
|
+
2. **Handshake**: MCP protocol negotiation
|
|
137
|
+
3. **Streaming**: Server sends events via SSE
|
|
138
|
+
4. **Requests**: Client sends HTTP POST for tool calls
|
|
139
|
+
5. **Reconnection**: Automatic reconnection on disconnect
|
|
140
|
+
|
|
141
|
+
### Authentication
|
|
142
|
+
|
|
143
|
+
**OAuth (Automatic):**
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"asana": {
|
|
147
|
+
"type": "sse",
|
|
148
|
+
"url": "https://mcp.asana.com/sse"
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Claude Code handles OAuth flow:
|
|
154
|
+
1. User prompted to authenticate on first use
|
|
155
|
+
2. Opens browser for OAuth flow
|
|
156
|
+
3. Tokens stored securely
|
|
157
|
+
4. Automatic token refresh
|
|
158
|
+
|
|
159
|
+
**Custom Headers:**
|
|
160
|
+
```json
|
|
161
|
+
{
|
|
162
|
+
"service": {
|
|
163
|
+
"type": "sse",
|
|
164
|
+
"url": "https://mcp.example.com/sse",
|
|
165
|
+
"headers": {
|
|
166
|
+
"Authorization": "Bearer ${API_TOKEN}"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Use Cases
|
|
173
|
+
|
|
174
|
+
**Official Services:**
|
|
175
|
+
- Asana: `https://mcp.asana.com/sse`
|
|
176
|
+
- GitHub: `https://mcp.github.com/sse`
|
|
177
|
+
- Other hosted MCP servers
|
|
178
|
+
|
|
179
|
+
**Custom Hosted Servers:**
|
|
180
|
+
Deploy your own MCP server and expose via HTTPS + SSE.
|
|
181
|
+
|
|
182
|
+
### Best Practices
|
|
183
|
+
|
|
184
|
+
1. **Always use HTTPS, never HTTP**
|
|
185
|
+
2. **Let OAuth handle authentication when available**
|
|
186
|
+
3. **Use environment variables for tokens**
|
|
187
|
+
4. **Handle connection failures gracefully**
|
|
188
|
+
5. **Document OAuth scopes required**
|
|
189
|
+
|
|
190
|
+
### Troubleshooting
|
|
191
|
+
|
|
192
|
+
**Connection refused:**
|
|
193
|
+
- Check URL is correct and accessible
|
|
194
|
+
- Verify HTTPS certificate is valid
|
|
195
|
+
- Check network connectivity
|
|
196
|
+
- Review firewall settings
|
|
197
|
+
|
|
198
|
+
**OAuth fails:**
|
|
199
|
+
- Clear cached tokens
|
|
200
|
+
- Check OAuth scopes
|
|
201
|
+
- Verify redirect URLs
|
|
202
|
+
- Re-authenticate
|
|
203
|
+
|
|
204
|
+
## HTTP (REST API)
|
|
205
|
+
|
|
206
|
+
### Overview
|
|
207
|
+
|
|
208
|
+
Connect to RESTful MCP servers via standard HTTP requests. Best for token-based auth and stateless interactions.
|
|
209
|
+
|
|
210
|
+
### Configuration
|
|
211
|
+
|
|
212
|
+
**Basic:**
|
|
213
|
+
```json
|
|
214
|
+
{
|
|
215
|
+
"api": {
|
|
216
|
+
"type": "http",
|
|
217
|
+
"url": "https://api.example.com/mcp"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**With authentication:**
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"api": {
|
|
226
|
+
"type": "http",
|
|
227
|
+
"url": "https://api.example.com/mcp",
|
|
228
|
+
"headers": {
|
|
229
|
+
"Authorization": "Bearer ${API_TOKEN}",
|
|
230
|
+
"Content-Type": "application/json",
|
|
231
|
+
"X-API-Version": "2024-01-01"
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Request/Response Flow
|
|
238
|
+
|
|
239
|
+
1. **Tool Discovery**: GET to discover available tools
|
|
240
|
+
2. **Tool Invocation**: POST with tool name and parameters
|
|
241
|
+
3. **Response**: JSON response with results or errors
|
|
242
|
+
4. **Stateless**: Each request independent
|
|
243
|
+
|
|
244
|
+
### Authentication
|
|
245
|
+
|
|
246
|
+
**Token-Based:**
|
|
247
|
+
```json
|
|
248
|
+
{
|
|
249
|
+
"headers": {
|
|
250
|
+
"Authorization": "Bearer ${API_TOKEN}"
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**API Key:**
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"headers": {
|
|
259
|
+
"X-API-Key": "${API_KEY}"
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Custom Auth:**
|
|
265
|
+
```json
|
|
266
|
+
{
|
|
267
|
+
"headers": {
|
|
268
|
+
"X-Auth-Token": "${AUTH_TOKEN}",
|
|
269
|
+
"X-User-ID": "${USER_ID}"
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Use Cases
|
|
275
|
+
|
|
276
|
+
- REST API backends
|
|
277
|
+
- Internal services
|
|
278
|
+
- Microservices
|
|
279
|
+
- Serverless functions
|
|
280
|
+
|
|
281
|
+
### Best Practices
|
|
282
|
+
|
|
283
|
+
1. **Use HTTPS for all connections**
|
|
284
|
+
2. **Store tokens in environment variables**
|
|
285
|
+
3. **Implement retry logic for transient failures**
|
|
286
|
+
4. **Handle rate limiting**
|
|
287
|
+
5. **Set appropriate timeouts**
|
|
288
|
+
|
|
289
|
+
### Troubleshooting
|
|
290
|
+
|
|
291
|
+
**HTTP errors:**
|
|
292
|
+
- 401: Check authentication headers
|
|
293
|
+
- 403: Verify permissions
|
|
294
|
+
- 429: Implement rate limiting
|
|
295
|
+
- 500: Check server logs
|
|
296
|
+
|
|
297
|
+
**Timeout issues:**
|
|
298
|
+
- Increase timeout if needed
|
|
299
|
+
- Check server performance
|
|
300
|
+
- Optimize tool implementations
|
|
301
|
+
|
|
302
|
+
## WebSocket (Real-time)
|
|
303
|
+
|
|
304
|
+
### Overview
|
|
305
|
+
|
|
306
|
+
Connect to MCP servers via WebSocket for real-time bidirectional communication. Best for streaming and low-latency applications.
|
|
307
|
+
|
|
308
|
+
### Configuration
|
|
309
|
+
|
|
310
|
+
**Basic:**
|
|
311
|
+
```json
|
|
312
|
+
{
|
|
313
|
+
"realtime": {
|
|
314
|
+
"type": "ws",
|
|
315
|
+
"url": "wss://mcp.example.com/ws"
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**With authentication:**
|
|
321
|
+
```json
|
|
322
|
+
{
|
|
323
|
+
"realtime": {
|
|
324
|
+
"type": "ws",
|
|
325
|
+
"url": "wss://mcp.example.com/ws",
|
|
326
|
+
"headers": {
|
|
327
|
+
"Authorization": "Bearer ${TOKEN}",
|
|
328
|
+
"X-Client-ID": "${CLIENT_ID}"
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Connection Lifecycle
|
|
335
|
+
|
|
336
|
+
1. **Handshake**: WebSocket upgrade request
|
|
337
|
+
2. **Connection**: Persistent bidirectional channel
|
|
338
|
+
3. **Messages**: JSON-RPC over WebSocket
|
|
339
|
+
4. **Heartbeat**: Keep-alive messages
|
|
340
|
+
5. **Reconnection**: Automatic on disconnect
|
|
341
|
+
|
|
342
|
+
### Use Cases
|
|
343
|
+
|
|
344
|
+
- Real-time data streaming
|
|
345
|
+
- Live updates and notifications
|
|
346
|
+
- Collaborative editing
|
|
347
|
+
- Low-latency tool calls
|
|
348
|
+
- Push notifications from server
|
|
349
|
+
|
|
350
|
+
### Best Practices
|
|
351
|
+
|
|
352
|
+
1. **Use WSS (secure WebSocket), never WS**
|
|
353
|
+
2. **Implement heartbeat/ping-pong**
|
|
354
|
+
3. **Handle reconnection logic**
|
|
355
|
+
4. **Buffer messages during disconnection**
|
|
356
|
+
5. **Set connection timeouts**
|
|
357
|
+
|
|
358
|
+
### Troubleshooting
|
|
359
|
+
|
|
360
|
+
**Connection drops:**
|
|
361
|
+
- Implement reconnection logic
|
|
362
|
+
- Check network stability
|
|
363
|
+
- Verify server supports WebSocket
|
|
364
|
+
- Review firewall settings
|
|
365
|
+
|
|
366
|
+
**Message delivery:**
|
|
367
|
+
- Implement message acknowledgment
|
|
368
|
+
- Handle out-of-order messages
|
|
369
|
+
- Buffer during disconnection
|
|
370
|
+
|
|
371
|
+
## Comparison Matrix
|
|
372
|
+
|
|
373
|
+
| Feature | stdio | SSE | HTTP | WebSocket |
|
|
374
|
+
|---------|-------|-----|------|-----------|
|
|
375
|
+
| **Transport** | Process | HTTP/SSE | HTTP | WebSocket |
|
|
376
|
+
| **Direction** | Bidirectional | Server→Client | Request/Response | Bidirectional |
|
|
377
|
+
| **State** | Stateful | Stateful | Stateless | Stateful |
|
|
378
|
+
| **Auth** | Env vars | OAuth/Headers | Headers | Headers |
|
|
379
|
+
| **Use Case** | Local tools | Cloud services | REST APIs | Real-time |
|
|
380
|
+
| **Latency** | Lowest | Medium | Medium | Low |
|
|
381
|
+
| **Setup** | Easy | Medium | Easy | Medium |
|
|
382
|
+
| **Reconnect** | Process respawn | Automatic | N/A | Automatic |
|
|
383
|
+
|
|
384
|
+
## Choosing the Right Type
|
|
385
|
+
|
|
386
|
+
**Use stdio when:**
|
|
387
|
+
- Running local tools or custom servers
|
|
388
|
+
- Need lowest latency
|
|
389
|
+
- Working with file systems or local databases
|
|
390
|
+
- Distributing server with plugin
|
|
391
|
+
|
|
392
|
+
**Use SSE when:**
|
|
393
|
+
- Connecting to hosted services
|
|
394
|
+
- Need OAuth authentication
|
|
395
|
+
- Using official MCP servers (Asana, GitHub)
|
|
396
|
+
- Want automatic reconnection
|
|
397
|
+
|
|
398
|
+
**Use HTTP when:**
|
|
399
|
+
- Integrating with REST APIs
|
|
400
|
+
- Need stateless interactions
|
|
401
|
+
- Using token-based auth
|
|
402
|
+
- Simple request/response pattern
|
|
403
|
+
|
|
404
|
+
**Use WebSocket when:**
|
|
405
|
+
- Need real-time updates
|
|
406
|
+
- Building collaborative features
|
|
407
|
+
- Low-latency critical
|
|
408
|
+
- Bi-directional streaming required
|
|
409
|
+
|
|
410
|
+
## Migration Between Types
|
|
411
|
+
|
|
412
|
+
### From stdio to SSE
|
|
413
|
+
|
|
414
|
+
**Before (stdio):**
|
|
415
|
+
```json
|
|
416
|
+
{
|
|
417
|
+
"local-server": {
|
|
418
|
+
"command": "node",
|
|
419
|
+
"args": ["server.js"]
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
**After (SSE - deploy server):**
|
|
425
|
+
```json
|
|
426
|
+
{
|
|
427
|
+
"hosted-server": {
|
|
428
|
+
"type": "sse",
|
|
429
|
+
"url": "https://mcp.example.com/sse"
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### From HTTP to WebSocket
|
|
435
|
+
|
|
436
|
+
**Before (HTTP):**
|
|
437
|
+
```json
|
|
438
|
+
{
|
|
439
|
+
"api": {
|
|
440
|
+
"type": "http",
|
|
441
|
+
"url": "https://api.example.com/mcp"
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
**After (WebSocket):**
|
|
447
|
+
```json
|
|
448
|
+
{
|
|
449
|
+
"realtime": {
|
|
450
|
+
"type": "ws",
|
|
451
|
+
"url": "wss://api.example.com/ws"
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Benefits: Real-time updates, lower latency, bi-directional communication.
|
|
457
|
+
|
|
458
|
+
## Advanced Configuration
|
|
459
|
+
|
|
460
|
+
### Multiple Servers
|
|
461
|
+
|
|
462
|
+
Combine different types:
|
|
463
|
+
|
|
464
|
+
```json
|
|
465
|
+
{
|
|
466
|
+
"local-db": {
|
|
467
|
+
"command": "npx",
|
|
468
|
+
"args": ["-y", "mcp-server-sqlite", "./data.db"]
|
|
469
|
+
},
|
|
470
|
+
"cloud-api": {
|
|
471
|
+
"type": "sse",
|
|
472
|
+
"url": "https://mcp.example.com/sse"
|
|
473
|
+
},
|
|
474
|
+
"internal-service": {
|
|
475
|
+
"type": "http",
|
|
476
|
+
"url": "https://api.example.com/mcp",
|
|
477
|
+
"headers": {
|
|
478
|
+
"Authorization": "Bearer ${API_TOKEN}"
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Conditional Configuration
|
|
485
|
+
|
|
486
|
+
Use environment variables to switch servers:
|
|
487
|
+
|
|
488
|
+
```json
|
|
489
|
+
{
|
|
490
|
+
"api": {
|
|
491
|
+
"type": "http",
|
|
492
|
+
"url": "${API_URL}",
|
|
493
|
+
"headers": {
|
|
494
|
+
"Authorization": "Bearer ${API_TOKEN}"
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
Set different values for dev/prod:
|
|
501
|
+
- Dev: `API_URL=http://localhost:8080/mcp`
|
|
502
|
+
- Prod: `API_URL=https://api.production.com/mcp`
|
|
503
|
+
|
|
504
|
+
## Security Considerations
|
|
505
|
+
|
|
506
|
+
### Stdio Security
|
|
507
|
+
|
|
508
|
+
- Validate command paths
|
|
509
|
+
- Don't execute user-provided commands
|
|
510
|
+
- Limit environment variable access
|
|
511
|
+
- Restrict file system access
|
|
512
|
+
|
|
513
|
+
### Network Security
|
|
514
|
+
|
|
515
|
+
- Always use HTTPS/WSS
|
|
516
|
+
- Validate SSL certificates
|
|
517
|
+
- Don't skip certificate verification
|
|
518
|
+
- Use secure token storage
|
|
519
|
+
|
|
520
|
+
### Token Management
|
|
521
|
+
|
|
522
|
+
- Never hardcode tokens
|
|
523
|
+
- Use environment variables
|
|
524
|
+
- Rotate tokens regularly
|
|
525
|
+
- Implement token refresh
|
|
526
|
+
- Document scopes required
|
|
527
|
+
|
|
528
|
+
## Conclusion
|
|
529
|
+
|
|
530
|
+
Choose the MCP server type based on your use case:
|
|
531
|
+
- **stdio** for local, custom, or NPM-packaged servers
|
|
532
|
+
- **SSE** for hosted services with OAuth
|
|
533
|
+
- **HTTP** for REST APIs with token auth
|
|
534
|
+
- **WebSocket** for real-time bidirectional communication
|
|
535
|
+
|
|
536
|
+
Test thoroughly and handle errors gracefully for robust MCP integration.
|