foundry-mcp 0.8.22__py3-none-any.whl

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.

Potentially problematic release.


This version of foundry-mcp might be problematic. Click here for more details.

Files changed (153) hide show
  1. foundry_mcp/__init__.py +13 -0
  2. foundry_mcp/cli/__init__.py +67 -0
  3. foundry_mcp/cli/__main__.py +9 -0
  4. foundry_mcp/cli/agent.py +96 -0
  5. foundry_mcp/cli/commands/__init__.py +37 -0
  6. foundry_mcp/cli/commands/cache.py +137 -0
  7. foundry_mcp/cli/commands/dashboard.py +148 -0
  8. foundry_mcp/cli/commands/dev.py +446 -0
  9. foundry_mcp/cli/commands/journal.py +377 -0
  10. foundry_mcp/cli/commands/lifecycle.py +274 -0
  11. foundry_mcp/cli/commands/modify.py +824 -0
  12. foundry_mcp/cli/commands/plan.py +640 -0
  13. foundry_mcp/cli/commands/pr.py +393 -0
  14. foundry_mcp/cli/commands/review.py +667 -0
  15. foundry_mcp/cli/commands/session.py +472 -0
  16. foundry_mcp/cli/commands/specs.py +686 -0
  17. foundry_mcp/cli/commands/tasks.py +807 -0
  18. foundry_mcp/cli/commands/testing.py +676 -0
  19. foundry_mcp/cli/commands/validate.py +982 -0
  20. foundry_mcp/cli/config.py +98 -0
  21. foundry_mcp/cli/context.py +298 -0
  22. foundry_mcp/cli/logging.py +212 -0
  23. foundry_mcp/cli/main.py +44 -0
  24. foundry_mcp/cli/output.py +122 -0
  25. foundry_mcp/cli/registry.py +110 -0
  26. foundry_mcp/cli/resilience.py +178 -0
  27. foundry_mcp/cli/transcript.py +217 -0
  28. foundry_mcp/config.py +1454 -0
  29. foundry_mcp/core/__init__.py +144 -0
  30. foundry_mcp/core/ai_consultation.py +1773 -0
  31. foundry_mcp/core/batch_operations.py +1202 -0
  32. foundry_mcp/core/cache.py +195 -0
  33. foundry_mcp/core/capabilities.py +446 -0
  34. foundry_mcp/core/concurrency.py +898 -0
  35. foundry_mcp/core/context.py +540 -0
  36. foundry_mcp/core/discovery.py +1603 -0
  37. foundry_mcp/core/error_collection.py +728 -0
  38. foundry_mcp/core/error_store.py +592 -0
  39. foundry_mcp/core/health.py +749 -0
  40. foundry_mcp/core/intake.py +933 -0
  41. foundry_mcp/core/journal.py +700 -0
  42. foundry_mcp/core/lifecycle.py +412 -0
  43. foundry_mcp/core/llm_config.py +1376 -0
  44. foundry_mcp/core/llm_patterns.py +510 -0
  45. foundry_mcp/core/llm_provider.py +1569 -0
  46. foundry_mcp/core/logging_config.py +374 -0
  47. foundry_mcp/core/metrics_persistence.py +584 -0
  48. foundry_mcp/core/metrics_registry.py +327 -0
  49. foundry_mcp/core/metrics_store.py +641 -0
  50. foundry_mcp/core/modifications.py +224 -0
  51. foundry_mcp/core/naming.py +146 -0
  52. foundry_mcp/core/observability.py +1216 -0
  53. foundry_mcp/core/otel.py +452 -0
  54. foundry_mcp/core/otel_stubs.py +264 -0
  55. foundry_mcp/core/pagination.py +255 -0
  56. foundry_mcp/core/progress.py +387 -0
  57. foundry_mcp/core/prometheus.py +564 -0
  58. foundry_mcp/core/prompts/__init__.py +464 -0
  59. foundry_mcp/core/prompts/fidelity_review.py +691 -0
  60. foundry_mcp/core/prompts/markdown_plan_review.py +515 -0
  61. foundry_mcp/core/prompts/plan_review.py +627 -0
  62. foundry_mcp/core/providers/__init__.py +237 -0
  63. foundry_mcp/core/providers/base.py +515 -0
  64. foundry_mcp/core/providers/claude.py +472 -0
  65. foundry_mcp/core/providers/codex.py +637 -0
  66. foundry_mcp/core/providers/cursor_agent.py +630 -0
  67. foundry_mcp/core/providers/detectors.py +515 -0
  68. foundry_mcp/core/providers/gemini.py +426 -0
  69. foundry_mcp/core/providers/opencode.py +718 -0
  70. foundry_mcp/core/providers/opencode_wrapper.js +308 -0
  71. foundry_mcp/core/providers/package-lock.json +24 -0
  72. foundry_mcp/core/providers/package.json +25 -0
  73. foundry_mcp/core/providers/registry.py +607 -0
  74. foundry_mcp/core/providers/test_provider.py +171 -0
  75. foundry_mcp/core/providers/validation.py +857 -0
  76. foundry_mcp/core/rate_limit.py +427 -0
  77. foundry_mcp/core/research/__init__.py +68 -0
  78. foundry_mcp/core/research/memory.py +528 -0
  79. foundry_mcp/core/research/models.py +1234 -0
  80. foundry_mcp/core/research/providers/__init__.py +40 -0
  81. foundry_mcp/core/research/providers/base.py +242 -0
  82. foundry_mcp/core/research/providers/google.py +507 -0
  83. foundry_mcp/core/research/providers/perplexity.py +442 -0
  84. foundry_mcp/core/research/providers/semantic_scholar.py +544 -0
  85. foundry_mcp/core/research/providers/tavily.py +383 -0
  86. foundry_mcp/core/research/workflows/__init__.py +25 -0
  87. foundry_mcp/core/research/workflows/base.py +298 -0
  88. foundry_mcp/core/research/workflows/chat.py +271 -0
  89. foundry_mcp/core/research/workflows/consensus.py +539 -0
  90. foundry_mcp/core/research/workflows/deep_research.py +4142 -0
  91. foundry_mcp/core/research/workflows/ideate.py +682 -0
  92. foundry_mcp/core/research/workflows/thinkdeep.py +405 -0
  93. foundry_mcp/core/resilience.py +600 -0
  94. foundry_mcp/core/responses.py +1624 -0
  95. foundry_mcp/core/review.py +366 -0
  96. foundry_mcp/core/security.py +438 -0
  97. foundry_mcp/core/spec.py +4119 -0
  98. foundry_mcp/core/task.py +2463 -0
  99. foundry_mcp/core/testing.py +839 -0
  100. foundry_mcp/core/validation.py +2357 -0
  101. foundry_mcp/dashboard/__init__.py +32 -0
  102. foundry_mcp/dashboard/app.py +119 -0
  103. foundry_mcp/dashboard/components/__init__.py +17 -0
  104. foundry_mcp/dashboard/components/cards.py +88 -0
  105. foundry_mcp/dashboard/components/charts.py +177 -0
  106. foundry_mcp/dashboard/components/filters.py +136 -0
  107. foundry_mcp/dashboard/components/tables.py +195 -0
  108. foundry_mcp/dashboard/data/__init__.py +11 -0
  109. foundry_mcp/dashboard/data/stores.py +433 -0
  110. foundry_mcp/dashboard/launcher.py +300 -0
  111. foundry_mcp/dashboard/views/__init__.py +12 -0
  112. foundry_mcp/dashboard/views/errors.py +217 -0
  113. foundry_mcp/dashboard/views/metrics.py +164 -0
  114. foundry_mcp/dashboard/views/overview.py +96 -0
  115. foundry_mcp/dashboard/views/providers.py +83 -0
  116. foundry_mcp/dashboard/views/sdd_workflow.py +255 -0
  117. foundry_mcp/dashboard/views/tool_usage.py +139 -0
  118. foundry_mcp/prompts/__init__.py +9 -0
  119. foundry_mcp/prompts/workflows.py +525 -0
  120. foundry_mcp/resources/__init__.py +9 -0
  121. foundry_mcp/resources/specs.py +591 -0
  122. foundry_mcp/schemas/__init__.py +38 -0
  123. foundry_mcp/schemas/intake-schema.json +89 -0
  124. foundry_mcp/schemas/sdd-spec-schema.json +414 -0
  125. foundry_mcp/server.py +150 -0
  126. foundry_mcp/tools/__init__.py +10 -0
  127. foundry_mcp/tools/unified/__init__.py +92 -0
  128. foundry_mcp/tools/unified/authoring.py +3620 -0
  129. foundry_mcp/tools/unified/context_helpers.py +98 -0
  130. foundry_mcp/tools/unified/documentation_helpers.py +268 -0
  131. foundry_mcp/tools/unified/environment.py +1341 -0
  132. foundry_mcp/tools/unified/error.py +479 -0
  133. foundry_mcp/tools/unified/health.py +225 -0
  134. foundry_mcp/tools/unified/journal.py +841 -0
  135. foundry_mcp/tools/unified/lifecycle.py +640 -0
  136. foundry_mcp/tools/unified/metrics.py +777 -0
  137. foundry_mcp/tools/unified/plan.py +876 -0
  138. foundry_mcp/tools/unified/pr.py +294 -0
  139. foundry_mcp/tools/unified/provider.py +589 -0
  140. foundry_mcp/tools/unified/research.py +1283 -0
  141. foundry_mcp/tools/unified/review.py +1042 -0
  142. foundry_mcp/tools/unified/review_helpers.py +314 -0
  143. foundry_mcp/tools/unified/router.py +102 -0
  144. foundry_mcp/tools/unified/server.py +565 -0
  145. foundry_mcp/tools/unified/spec.py +1283 -0
  146. foundry_mcp/tools/unified/task.py +3846 -0
  147. foundry_mcp/tools/unified/test.py +431 -0
  148. foundry_mcp/tools/unified/verification.py +520 -0
  149. foundry_mcp-0.8.22.dist-info/METADATA +344 -0
  150. foundry_mcp-0.8.22.dist-info/RECORD +153 -0
  151. foundry_mcp-0.8.22.dist-info/WHEEL +4 -0
  152. foundry_mcp-0.8.22.dist-info/entry_points.txt +3 -0
  153. foundry_mcp-0.8.22.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,344 @@
1
+ Metadata-Version: 2.4
2
+ Name: foundry-mcp
3
+ Version: 0.8.22
4
+ Summary: MCP server for SDD toolkit spec management
5
+ Project-URL: Homepage, https://github.com/tylerburleigh/foundry-mcp
6
+ Project-URL: Repository, https://github.com/tylerburleigh/foundry-mcp
7
+ Author: Tyler Burleigh
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Keywords: mcp,sdd,spec-driven-development,specification
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Requires-Python: >=3.10
19
+ Requires-Dist: click>=8.0.0
20
+ Requires-Dist: fastmcp>=0.1.0
21
+ Requires-Dist: filelock>=3.20.1
22
+ Requires-Dist: mcp>=1.0.0
23
+ Requires-Dist: tomli>=2.0.0; python_version < '3.11'
24
+ Provides-Extra: dashboard
25
+ Requires-Dist: pandas>=2.0.0; extra == 'dashboard'
26
+ Requires-Dist: plotly>=5.18.0; extra == 'dashboard'
27
+ Requires-Dist: streamlit>=1.28.0; extra == 'dashboard'
28
+ Provides-Extra: metrics
29
+ Requires-Dist: prometheus-client>=0.17.0; extra == 'metrics'
30
+ Provides-Extra: observability
31
+ Requires-Dist: opentelemetry-exporter-otlp>=1.20.0; extra == 'observability'
32
+ Requires-Dist: opentelemetry-sdk>=1.20.0; extra == 'observability'
33
+ Requires-Dist: prometheus-client>=0.17.0; extra == 'observability'
34
+ Provides-Extra: test
35
+ Requires-Dist: hypothesis>=6.0.0; extra == 'test'
36
+ Requires-Dist: jsonschema>=4.0.0; extra == 'test'
37
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
38
+ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
39
+ Requires-Dist: pytest>=7.0.0; extra == 'test'
40
+ Provides-Extra: tracing
41
+ Requires-Dist: opentelemetry-exporter-otlp>=1.20.0; extra == 'tracing'
42
+ Requires-Dist: opentelemetry-sdk>=1.20.0; extra == 'tracing'
43
+ Description-Content-Type: text/markdown
44
+
45
+ # foundry-mcp
46
+
47
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
48
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
49
+ [![MCP Compatible](https://img.shields.io/badge/MCP-compatible-green.svg)](https://modelcontextprotocol.io/)
50
+ [![Development Status](https://img.shields.io/badge/status-alpha-orange.svg)](https://pypi.org/project/foundry-mcp/)
51
+
52
+ **An MCP server and native CLI that bring spec-driven development to your AI assistant.**
53
+
54
+ foundry-mcp packages the spec lifecycle, a single CLI/service layer, and MCP adapters described in the completed specs under `specs/completed/`. Every MCP response uses the standardized `response-v2` envelope, the CLI shares the same service layer, and feature-flagged tool suites cover environment setup, authoring, validation, LLM review, and automated testing.
55
+
56
+ ## 🚀 Why foundry-mcp?
57
+
58
+ - **Single service layer for CLI + MCP** — The completed CLI re-implementation and subprocess elimination specs ensure the CLI and MCP tools share contracts, observability, and feature flags.
59
+ - **Spec lifecycle automation** — Tools manage creation, validation, lifecycle transitions, blockers, and journaling with cursor-based pagination and dependency tracking.
60
+ - **Quality gates & behavioral testing** — A dedicated regression harness keeps foundry-mcp aligned with the legacy claude-sdd-toolkit CLI while integration/unit/property suites guard regressions.
61
+ - **LLM-ready workflows** — Provider abstractions, prompt shielding, and graceful fallbacks power AI review, documentation, and PR creation workflows when LLM access is available.
62
+ - **Security & governance baked in** — API keys, workspace scoping, rate limiting, structured logging, and audit trails are enforced before business logic as mandated by the MCP best-practices remediation spec.
63
+ - **Discovery-first design** — Capabilities are declared through `mcp/capabilities_manifest.json` so clients can negotiate response contracts, feature flags, and tool availability.
64
+
65
+ ## 📦 Installation
66
+
67
+ ### Pre-requisites
68
+
69
+ - Python 3.10 or higher
70
+ - macOS, Linux, or Windows
71
+ - MCP-compatible client (e.g., Claude Code)
72
+
73
+ ### Quick install
74
+
75
+ #### Run instantly with `uvx`
76
+
77
+ ```bash
78
+ uvx foundry-mcp
79
+ ```
80
+
81
+ #### Install from PyPI with `pip`
82
+
83
+ ```bash
84
+ pip install foundry-mcp
85
+ ```
86
+
87
+ #### Install from source (development)
88
+
89
+ ```bash
90
+ git clone https://github.com/tylerburleigh/foundry-mcp.git
91
+ cd foundry-mcp
92
+ pip install -e ".[test]"
93
+ ```
94
+
95
+ #### Launch the native SDD CLI
96
+
97
+ ```bash
98
+ python -m foundry_mcp.cli --help
99
+ ```
100
+
101
+ ## 📅 Release cadence & support channels
102
+
103
+ - The project currently ships **alpha** releases after each spec milestone; see [CHANGELOG.md](CHANGELOG.md) for the latest tagged version.
104
+ - PyPI publishes semantic versions that align with the spec roadmap (`response_contract_v2`, feature flags, test suites, etc.).
105
+ - MCP capabilities expose rollout state so clients can opt-in to new contracts (for example `response_contract=v2`).
106
+
107
+ ## 📋 Key features
108
+
109
+ ### Spec lifecycle & governance
110
+
111
+ ```
112
+ specs/
113
+ ├── pending/ # New specs awaiting activation
114
+ ├── active/ # Currently being worked on
115
+ ├── completed/ # Finished specs (automatically journaled)
116
+ └── archived/ # Historical reference
117
+ ```
118
+
119
+ - Discover and validate specs via `spec(action=...)`.
120
+ - Transition spec folders/states via `lifecycle(action=...)`.
121
+ - Automatically journal decisions, blockers, and dependency updates with audit metadata.
122
+
123
+ ### Task operations & execution
124
+
125
+ - `task(action=next|prepare|start|complete|...)` and blocker flows expose the full dependency graph.
126
+ - `plan(action=create|list|review)` supports lightweight planning and review flows.
127
+ - Notifications and sampling channels surface phase completions to MCP clients.
128
+
129
+ ### Batch metadata utilities
130
+
131
+ - `task(action=metadata-batch)` — Apply metadata updates (e.g., `file_path`, `estimated_hours`) to multiple nodes at once. Supports flexible AND-based filtering by `node_type`, `phase_id`, or `pattern` regex. Includes `dry_run` mode for previewing changes.
132
+ - `task(action=fix-verification-types)` — Auto-fix invalid or missing `verification_type` on verify nodes. Supports legacy mappings (`test` → `run-tests`, `auto` → `run-tests`) and defaults unknown types to `manual`. Includes `dry_run` mode for previewing fixes.
133
+
134
+ ### Code, docs, and testing intelligence
135
+
136
+ - Code navigation tools via `code(action=...)` support symbol lookup and call-graph tracing.
137
+ - Testing tools via `test(action=run|discover, preset=quick|unit|full)` run pytest presets with structured output.
138
+ - Shared adapters mirror claude-sdd-toolkit behavior and integrate with the regression testing harness.
139
+
140
+ ### LLM-powered workflows
141
+
142
+ - Configurable provider abstraction with OpenAI, Anthropic, and local backends (Ollama, etc.) plus prompt shielding and observability hooks.
143
+ - AI-enhanced review via `review(action=spec|fidelity|parse-feedback)` and PR helpers degrade gracefully when no LLM is configured.
144
+ - Timeouts, retries, and circuit breakers follow the resilience patterns from the remediation specs.
145
+
146
+ ### CLI + MCP integration
147
+
148
+ - Run `foundry-mcp` as an MCP server or `python -m foundry_mcp.cli` for the JSON-first CLI.
149
+ - Both surfaces share response helpers, validation, feature flags, and discovery metadata so you can switch between automated MCP clients and terminal workflows without drift.
150
+
151
+ ### Resources & prompts
152
+
153
+ - `foundry://specs/` resources expose full spec hierarchies, journals, and templates for AI assistants.
154
+ - Workflow prompts (`start_feature`, `debug_test`, `complete_phase`, etc.) guide SDD operations end-to-end.
155
+
156
+ ## 🔐 Access & security
157
+
158
+ - Workspace roots are scoped via configuration to prevent directory escape.
159
+ - Optional API keys (`FOUNDRY_MCP_API_KEYS`) or tenant TOML overrides enforce authentication before any tool runs.
160
+ - Rate limits and concurrency budgets are declared in the capabilities manifest and enforced server-side with structured audit logs.
161
+ - Sensitive data redaction, prompt shielding, and validation helpers protect against prompt injection or oversized payloads.
162
+
163
+ ## 🧾 Response contract & discovery
164
+
165
+ All MCP tools emit the standardized envelope defined in `docs/codebase_standards/mcp_response_schema.md`:
166
+
167
+ ```json
168
+ {
169
+ "success": true,
170
+ "data": { ... },
171
+ "error": null,
172
+ "meta": {
173
+ "version": "response-v2",
174
+ "pagination": { ... },
175
+ "warnings": []
176
+ }
177
+ }
178
+ ```
179
+
180
+ - `success`, `data`, `error`, and `meta` are always present so clients never guess at output shape.
181
+ - `response_contract_v2` is feature-flagged; clients advertise support via capability negotiation.
182
+ - `mcp/capabilities_manifest.json` advertises the 17 unified tools (plus feature flags like `unified_manifest`).
183
+
184
+ **Legacy → unified mapping (examples)**
185
+
186
+ | Legacy tool | Unified call |
187
+ |---|---|
188
+ | Legacy Tool (Removed) | Unified Equivalent |
189
+ |----------------------|--------------------|
190
+ | `task-next` | `task(action="next")` |
191
+ | `spec-validate` | `spec(action="validate")` |
192
+ | `test-run` | `test(action="run", preset="full")` |
193
+ | `tool-list` | `server(action="tools")` |
194
+ | `get-server-context` | `server(action="context")` |
195
+
196
+ ## ⚙️ Configuration
197
+
198
+ ### Environment variables
199
+
200
+ | Variable | Description | Default |
201
+ |----------|-------------|---------|
202
+ | `FOUNDRY_MCP_SPECS_DIR` | Path to specs directory | Auto-detected from workspace |
203
+ | `FOUNDRY_MCP_LOG_LEVEL` | Logging level (DEBUG, INFO, etc.) | `INFO` |
204
+ | `FOUNDRY_MCP_WORKFLOW_MODE` | Execution mode: `single`, `autonomous`, `batch` | `single` |
205
+ | `FOUNDRY_MCP_API_KEYS` | Comma-separated API keys required for tool access | Disabled |
206
+ | `FOUNDRY_MCP_FEATURE_FLAGS` | Additional feature flags to enable (e.g., `planning_tools`) | Based on spec rollout |
207
+ | `FOUNDRY_MCP_RESPONSE_CONTRACT` | Force response contract version (`v2`) | Auto-negotiated |
208
+ | `FOUNDRY_MODE` | Server mode: `full` (16 tools) or `minimal` (1 wake tool) | `full` |
209
+ | `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | LLM provider credentials | Not set |
210
+
211
+ ### TOML configuration
212
+
213
+ Create `foundry-mcp.toml` for shared settings:
214
+
215
+ ```toml
216
+ [workspace]
217
+ specs_dir = "/path/to/specs"
218
+
219
+ [logging]
220
+ level = "INFO"
221
+ structured = true
222
+
223
+ [workflow]
224
+ mode = "single"
225
+ auto_validate = true
226
+ journal_enabled = true
227
+
228
+ [llm]
229
+ provider = "openai" # or "anthropic", "local"
230
+ model = "gpt-4"
231
+ timeout = 30
232
+
233
+ [security]
234
+ require_api_key = true
235
+ allowed_keys = ["tenant-prod", "tenant-dev"]
236
+ workspace_roots = ["/repos/specs"]
237
+
238
+ [feature_flags]
239
+ enabled = ["environment_tools", "spec_helpers", "planning_tools", "response_contract_v2"]
240
+ ```
241
+
242
+ ## 🚀 Getting started
243
+
244
+ ### Launch as an MCP server
245
+
246
+ ```bash
247
+ foundry-mcp
248
+ ```
249
+
250
+ The server will advertise its capabilities, feature flags, and response contract so MCP clients (Claude Code, Gemini CLI, etc.) can connect automatically.
251
+
252
+ ### Use the native SDD CLI
253
+
254
+ ```bash
255
+ python -m foundry_mcp.cli task next --specs-dir /path/to/specs
256
+ ```
257
+
258
+ All CLI commands output JSON for reliable parsing by AI coding tools and mirror the legacy `claude-sdd-toolkit` surface.
259
+
260
+ ### Claude Code setup
261
+
262
+ Add foundry-mcp through Claude Code settings (Command Palette → **Claude Code: Configure MCP Servers**) and include:
263
+
264
+ ```json
265
+ {
266
+ "mcpServers": {
267
+ "foundry-mcp": {
268
+ "command": "uvx",
269
+ "args": ["foundry-mcp"],
270
+ "env": {
271
+ "FOUNDRY_MCP_SPECS_DIR": "/path/to/specs",
272
+ "FOUNDRY_MCP_RESPONSE_CONTRACT": "v2"
273
+ }
274
+ }
275
+ }
276
+ }
277
+ ```
278
+
279
+ <details>
280
+ <summary>Using a pip installation instead?</summary>
281
+
282
+ ```json
283
+ {
284
+ "mcpServers": {
285
+ "foundry-mcp": {
286
+ "command": "foundry-mcp",
287
+ "env": {
288
+ "FOUNDRY_MCP_SPECS_DIR": "/path/to/specs"
289
+ }
290
+ }
291
+ }
292
+ }
293
+ ```
294
+ </details>
295
+
296
+ ### Quick usage examples
297
+
298
+ ```bash
299
+ # List specs via MCP tool (unified router)
300
+ echo '{"action": "list"}' | foundry-mcp --tool spec
301
+
302
+ # Validate a spec via MCP tool
303
+ echo '{"action": "validate", "spec_id": "sdd-core-operations-2025-11-27-001"}' | foundry-mcp --tool spec
304
+
305
+ # Run CLI validation without an MCP client
306
+ python -m foundry_mcp.cli --specs-dir ./specs validate check sdd-core-operations-2025-11-27-001
307
+ ```
308
+
309
+ ## 📚 Documentation
310
+
311
+ | Guide | Description |
312
+ |-------|-------------|
313
+ | [SDD Philosophy](docs/concepts/sdd-philosophy.md) | Why spec-driven development matters |
314
+ | [Architecture Overview](docs/architecture/adr-001-cli-architecture.md) | CLI/MCP architecture decision record |
315
+ | [Development Guide](docs/guides/development-guide.md) | Setup, architecture, contributing |
316
+ | [Testing Guide](docs/guides/testing.md) | Running and debugging tests / fixtures |
317
+ | [LLM Configuration](docs/guides/llm-configuration.md) | Provider setup & fallbacks |
318
+ | [MCP Best Practices](docs/mcp_best_practices/README.md) | Canonical implementation checklist |
319
+ | [Response Schema](docs/codebase_standards/mcp_response_schema.md) | Standardized envelope reference |
320
+ | [CLI Output Contract](docs/codebase_standards/cli-output.md) | JSON-first CLI expectations |
321
+
322
+ ## 🧪 Testing & quality gates
323
+
324
+ ```bash
325
+ pytest # Full suite
326
+ pytest tests/integration/test_mcp_smoke.py # MCP smoke tests
327
+ pytest tests/integration/test_mcp_tools.py # Tool contract coverage
328
+ ```
329
+
330
+ - Regression tests keep MCP/CLI adapters aligned with the legacy claude-sdd-toolkit contracts.
331
+ - Golden fixtures (`tests/fixtures/golden`) ensure response envelopes, error semantics, and pagination never regress.
332
+ - Freshness checks (doc generation, capability manifests) run alongside core unit and integration suites.
333
+
334
+ ## 🤝 Contributing
335
+
336
+ Contributions are welcome! Please read the [MCP Best Practices](docs/mcp_best_practices/README.md) before submitting PRs. All changes should keep specs, docs, code, and fixtures in sync and follow the decision matrix in `AGENTS.md`.
337
+
338
+ ## 📄 License
339
+
340
+ MIT License — see [LICENSE](LICENSE) for details.
341
+
342
+ ---
343
+
344
+ **Built by [Tyler Burleigh](https://github.com/tylerburleigh)** · [Report an Issue](https://github.com/tylerburleigh/foundry-mcp/issues) · [View on GitHub](https://github.com/tylerburleigh/foundry-mcp)
@@ -0,0 +1,153 @@
1
+ foundry_mcp/__init__.py,sha256=V3Ds_VOCLyfrry2-BPGfoH4e6j9YAc4Qm4tObwJJ_jM,405
2
+ foundry_mcp/config.py,sha256=bNJbBctDhoKJ6h4juig1B2DKLHcEzMuYIQQl8gno4J0,57070
3
+ foundry_mcp/server.py,sha256=9GjG4xkk2yD_nNcynCC8RV0EX7xljRWeoWQ-mC0COaw,4897
4
+ foundry_mcp/cli/__init__.py,sha256=K7cSTO88RGrsSwQkpZvhi88ZuazN8X_ldPDEhnAGyqU,1583
5
+ foundry_mcp/cli/__main__.py,sha256=wPwlid-SomQl5oGxtM319jjN4OSE-KWZtsdHctp4juU,167
6
+ foundry_mcp/cli/agent.py,sha256=QPuoZkLeNwmvjqCb2a3CPXJx9YWNJmd8s4a9iRbENIM,2855
7
+ foundry_mcp/cli/config.py,sha256=9jdpVw_LfTOOLR9LO3wzm82ziwKq7tv1JMBrj40iWsE,2980
8
+ foundry_mcp/cli/context.py,sha256=RKlYfcDsjS3Z-rvQxQl3DT8FjDQliDi928SCTJR28MI,10480
9
+ foundry_mcp/cli/logging.py,sha256=z-O-qQSIfndcIOiCkKr8TJ78Pldn0jNXWtjrCk8t1Ho,5974
10
+ foundry_mcp/cli/main.py,sha256=0BPbEbbNzZtS1rDjTqQlLZw2cGL4jaOdHtSk5ov9NWU,1088
11
+ foundry_mcp/cli/output.py,sha256=ZH3cHMoNo39hEXlXO2hcdX21SZdg5ewXyV7YGjl1txs,3986
12
+ foundry_mcp/cli/registry.py,sha256=25yV3o-q7VgnfqjDvqVQHyphe9BQF6y2y70zY52jWLM,2816
13
+ foundry_mcp/cli/resilience.py,sha256=o4flW5JN9nOPq5RVYvRf88cEb4KbqgI3kg2rfkcxv6g,5248
14
+ foundry_mcp/cli/transcript.py,sha256=DbusgsUCipi9l8YVHY20U5rbE13dM76PQbUokGocgV4,7227
15
+ foundry_mcp/cli/commands/__init__.py,sha256=vU8zLcC1opoM5Ox4du-0mG4gxHJ6N1tRaE4F0KoJBfk,1171
16
+ foundry_mcp/cli/commands/cache.py,sha256=_bVPkWXRT4Q-EtDOQIYY6TkJR1m49dm4RQ_lbSEaqRE,3373
17
+ foundry_mcp/cli/commands/dashboard.py,sha256=9T_Lu78p9y491_njoPgM02uPBccp11jbDNBJ1IttGUU,3868
18
+ foundry_mcp/cli/commands/dev.py,sha256=kBtZacvf-lXyGpmdNuZIZZrdZdtMEtxsQqP6HtUR5mk,12210
19
+ foundry_mcp/cli/commands/journal.py,sha256=T7SGvZrdnV0iN1TgHibqBoZSVSMWaye7FiFED3duYik,10936
20
+ foundry_mcp/cli/commands/lifecycle.py,sha256=vtmNyw4QL1igwEeQMoyM0lD-blCvY-3qlYF6sZHc4Z8,8301
21
+ foundry_mcp/cli/commands/modify.py,sha256=Loe5J-P093E9rFJJDZyRFnQB6ez6OkWlZ_eF1bVmiC0,21936
22
+ foundry_mcp/cli/commands/plan.py,sha256=NtESmJUiKlFPwfldLyEjdnpQFqyMNIKxLPv76HdsJNE,18017
23
+ foundry_mcp/cli/commands/pr.py,sha256=4PnLJrsB7op6RIP7Z1cDvrcSGMfknRRfBJrDd8aXBpw,11035
24
+ foundry_mcp/cli/commands/review.py,sha256=2AblIo2NgXHEghlKLFGYeMRnj27mw_mTvjxRUpjHyBo,21174
25
+ foundry_mcp/cli/commands/session.py,sha256=ZBWNHblgqkQHKkx4hkFZIQ5K1Wh7LnB8vw0nMdXtenw,15700
26
+ foundry_mcp/cli/commands/specs.py,sha256=awVhJ1hUvDai4IibjEjDDUcB_FOmSTo-yLh7yROF6h8,20644
27
+ foundry_mcp/cli/commands/tasks.py,sha256=TToK6pcwlAqF1zYQ2mKB36Esw9C3htAyvx6Qc8-nOQE,25246
28
+ foundry_mcp/cli/commands/testing.py,sha256=5ZtZ2XJ79V9FmsnvgQ1Z47qGGKMVeFuCOf7GivntMkI,20317
29
+ foundry_mcp/cli/commands/validate.py,sha256=Y_dJmx0WgdxYQkIa8y6H0HSHtQBhXYaqFMv62wEwuD8,30630
30
+ foundry_mcp/core/__init__.py,sha256=LgBtknZIRhvDQT2c8D07TeymkSmDZonrCxWZUZOgeSM,3025
31
+ foundry_mcp/core/ai_consultation.py,sha256=wAtIUuCHIGy84Bbv6WIC4nEg91x5VqjOH1w58y7zTeA,62861
32
+ foundry_mcp/core/batch_operations.py,sha256=8iSXmAIAMF_r_bAoaR9wGYyjo-zgGPGo70IFb0BbeZk,38625
33
+ foundry_mcp/core/cache.py,sha256=7eM1-J_CXgQUid1JTTRS0aRxOZK9HgTRLEzX-k534po,5443
34
+ foundry_mcp/core/capabilities.py,sha256=Zq6QJ7bvHL4GIOxjQNjmUGLFBeEjvVNj4XP2RLswebE,13144
35
+ foundry_mcp/core/concurrency.py,sha256=qOlfYmlSDYU-deqnqa0r5ccGwey-MIM5QiDag_K6xzk,26571
36
+ foundry_mcp/core/context.py,sha256=2M77uy-1KW-EzVxT2bdWPUFc6mWbANK1iYsCNFhMOls,16292
37
+ foundry_mcp/core/discovery.py,sha256=d-pouSFhYQToQnH6s6Yw5cPDHKp2UpRzMkkNhlmHaKs,53898
38
+ foundry_mcp/core/error_collection.py,sha256=MjpYU0OrTpQRIg8ND-EQzd-H-vM4LKtRHUNuveQFvp8,25069
39
+ foundry_mcp/core/error_store.py,sha256=P5irmUJIXh9BNyg_Mh7HYoKqtSjwHpj9vhUcwtqh4V8,20725
40
+ foundry_mcp/core/health.py,sha256=GcpLnHDSF5W_nf0k7-5icGeZmrKw-sUU_67ddMe8Kt4,25115
41
+ foundry_mcp/core/intake.py,sha256=qjmX5gk9Ae5HjSVLvwmQmPSloJFMsho1SsyUboNhkx8,32722
42
+ foundry_mcp/core/journal.py,sha256=gkB3P-PrBOC_qmoLr0_RfNs-i40he5RL9RVMkBMZgiw,19556
43
+ foundry_mcp/core/lifecycle.py,sha256=LALbkljjUrXtGe0No8eux9vAr-AIlDDltn9jz1HToHY,10959
44
+ foundry_mcp/core/llm_config.py,sha256=9wzUiT7-oAXE-T__VNwX812jUtS6avqczgdBELjCgis,48489
45
+ foundry_mcp/core/llm_patterns.py,sha256=1ZCuCkZ6ov2abk4Wt6T35a2Fg0Dp-0ALV5sdm5N9gXE,15336
46
+ foundry_mcp/core/llm_provider.py,sha256=VG4lJn5gIF8QNbAV81ysyEPkbg3XehCdw5m2KDtae9c,52595
47
+ foundry_mcp/core/logging_config.py,sha256=Dlo6lL5eollUXk9U43PviuvU9d6jW_AREEQK63vE2IE,10960
48
+ foundry_mcp/core/metrics_persistence.py,sha256=rvcNsaGXC811feicjLu7nq7ayUX_aTD7tyHcDGPYO8w,18231
49
+ foundry_mcp/core/metrics_registry.py,sha256=TpOkaFXpPMDagV537IbNPW4InZH1IaQT8v0pLZyBXJc,10438
50
+ foundry_mcp/core/metrics_store.py,sha256=ctBgaedVkSmeyQlQmkrnJEg9jAAxw6sZNfCW2xt2a6o,22482
51
+ foundry_mcp/core/modifications.py,sha256=g6nnXunEhqjXyr5HrV3dPoMMmMjML-3tYWKjlmxt1GY,6343
52
+ foundry_mcp/core/naming.py,sha256=lzIx_6ZScAHD2RO_N_FOzLDoKS7J2Drxh6irCE083IY,4779
53
+ foundry_mcp/core/observability.py,sha256=Y7f9ws8Glml4ThoMynj4G0vkhZEAw2rHtglw9uap7Vo,41477
54
+ foundry_mcp/core/otel.py,sha256=BVb4rgyo11GMUnJuGSji_0mjvTNyO8f5E1LNCoyVe08,13516
55
+ foundry_mcp/core/otel_stubs.py,sha256=lVWL7qQHo7QRj9NvvyqNvvxzjGvLFiDEdJQDqpc5XcE,6834
56
+ foundry_mcp/core/pagination.py,sha256=S_iTmZYmLda1to-__LLMM0sQI1xJMvAzjW0NAHLKx6A,7243
57
+ foundry_mcp/core/progress.py,sha256=ZFBVzxFY_YTQPKOM1zOA_ylQG-tJishht3h41xhWz2I,11978
58
+ foundry_mcp/core/prometheus.py,sha256=d2pYrRlY201RCzMPG_70wrJ0PzCdVzBbJqFAJ7_IiOw,17313
59
+ foundry_mcp/core/rate_limit.py,sha256=6Hrx60Az4z8lxXW0DeEx1hrGQPXRwbhhRVI1PA72BKQ,13395
60
+ foundry_mcp/core/resilience.py,sha256=DrH6fbMYXjRmjKDukT8zLL49JEKsgza2LGsgBow4usQ,18831
61
+ foundry_mcp/core/responses.py,sha256=q9OTtuWzL5ueKT3iEGKa6HTMTYDLM-PsXA_G6jbmyHI,55048
62
+ foundry_mcp/core/review.py,sha256=DkiNG1DWgmm5PCuZrGstYI6mcd7ub9sXQpPARbk-HWM,11183
63
+ foundry_mcp/core/security.py,sha256=4ABOhWBzu7P9gMuC8gTXr3PrjEmEp_eSAgrFZG2sjyI,15444
64
+ foundry_mcp/core/spec.py,sha256=F3285h5fTtCi4n6MLsT3ZALgOH3SiBd-Z6hEKL1M3bo,138336
65
+ foundry_mcp/core/task.py,sha256=CCt_qJD-60Z_r5FmZfUlLVGpdQrpUT6WpVe_PohXsRg,85886
66
+ foundry_mcp/core/testing.py,sha256=roee_ZddoB7xNxRk1pz89-4eOb6Sc2X6vKk0VLzd3Cg,24930
67
+ foundry_mcp/core/validation.py,sha256=Ra5SYGk5iULxBMDqXRQRYFQgrwRfCAv1Y4yqlASbl4Y,80887
68
+ foundry_mcp/core/prompts/__init__.py,sha256=0rx9sX-D_Zgfah-gPoUPYxW5GnhjxZmCVNzvurMOk8s,14316
69
+ foundry_mcp/core/prompts/fidelity_review.py,sha256=mmuWuDW5Ljj1IUYy3yGY7MjuOguLhytz5tYY9y0SqOI,22360
70
+ foundry_mcp/core/prompts/markdown_plan_review.py,sha256=WXH0N-QwC31Bo4i2lrCGWfIjviyi0ZkPS5kAuNOYsZ0,18256
71
+ foundry_mcp/core/prompts/plan_review.py,sha256=m4N5p_EQFrtvhYxt5PVtU9KcSr9sDBGboF-9ZvR40Cg,21992
72
+ foundry_mcp/core/providers/__init__.py,sha256=E9PuavQrH9LyjP33PWwIlBo2uYjjbOebqpvm0N42E7o,6286
73
+ foundry_mcp/core/providers/base.py,sha256=9tNNY4R-mFmiLEocqrDk5Lgt9iSVAd9BZWac0qJ7tXY,17953
74
+ foundry_mcp/core/providers/claude.py,sha256=3AAuzuVgIro8bHhZ2NKnsyPn1J4nSRo2K3q1UAqxkhE,15441
75
+ foundry_mcp/core/providers/codex.py,sha256=9WU1AsR-3W2VJrhnBWl5CST3LrQqoNAGaz6SS0bCcAQ,21696
76
+ foundry_mcp/core/providers/cursor_agent.py,sha256=uavHhSLIgGbHNsJpxQlReSCJmxP5aLdDhAeXa2BtoDs,22572
77
+ foundry_mcp/core/providers/detectors.py,sha256=yOEUB22-P11zdxhNXVOxr-R435YQ4PGx81RmF8vqHSo,16580
78
+ foundry_mcp/core/providers/gemini.py,sha256=v73sprjqnxiVilZJomdDnmY7Y9a8-aAmDo-cxkfj7Z4,14648
79
+ foundry_mcp/core/providers/opencode.py,sha256=FW2EQB3sxwljK9gOHgbuFWQ2LOkgvowg2bNczEGFdyI,26431
80
+ foundry_mcp/core/providers/opencode_wrapper.js,sha256=mSPCHWu1wjVrCso0WRTzv3R9-2X5rMPSSHRKFXgxk3I,7764
81
+ foundry_mcp/core/providers/package-lock.json,sha256=J49dNHIagU2eArW1wyZhGqHaHOV6EyiNerdldoPF3Qs,648
82
+ foundry_mcp/core/providers/package.json,sha256=nwRGNP00W0_kSgSN4b8BxofmagXYPTELhNm3p_eg3g8,513
83
+ foundry_mcp/core/providers/registry.py,sha256=uAVJ0dvE_lTtTM6lE_RV9QCvGjP33gYxxXYCy_68Y8c,19147
84
+ foundry_mcp/core/providers/test_provider.py,sha256=7RlAkc8H-2uBd25tmKs_Cu7Fl6EUpBB5eXKTx7G1Esk,5213
85
+ foundry_mcp/core/providers/validation.py,sha256=ohhDPzvJOkt3y6vLx1_Dl8dTIu6kTtXT39zVm6HhzbA,25866
86
+ foundry_mcp/core/research/__init__.py,sha256=fEBsDm4Oz5qVgEN3etuEEx27jnDV3PkxndTlhOQwcCY,1478
87
+ foundry_mcp/core/research/memory.py,sha256=Z-hitvjiWBTJn1vdFyEECTlrCIaN2FBoirXP23pIdrU,17586
88
+ foundry_mcp/core/research/models.py,sha256=586Z3_IJEEG-4M521vJ04h9yih6WnEs7gHDSnkTxJ7Q,44325
89
+ foundry_mcp/core/research/providers/__init__.py,sha256=KQ39_7XiWkQWVs95rdibZziv6rvHjKlOIcfWq6LihAs,1282
90
+ foundry_mcp/core/research/providers/base.py,sha256=Sso29K5AEr-6IYeIZNoa3LK7tCWoiUECkAQQCFzfjk4,7424
91
+ foundry_mcp/core/research/providers/google.py,sha256=UDthug1szRH1jz_DB0MRMaoj--F3joN0N0u79UVDhB0,17580
92
+ foundry_mcp/core/research/providers/perplexity.py,sha256=4PPZQvTSzjEHY4kxXkwC7h9Z8I5_YKNq6hRajYMvO_c,15093
93
+ foundry_mcp/core/research/providers/semantic_scholar.py,sha256=qGxw5z24yPs9NkKR7cBUKWqRM7gstRBxrPvrSEgW_9I,18993
94
+ foundry_mcp/core/research/providers/tavily.py,sha256=C-8S7jAsCmbuUfsSmZy7JFDZwHC6pPHc2IvHD2NdElE,13019
95
+ foundry_mcp/core/research/workflows/__init__.py,sha256=LHyTClhlGaENg5USVLZs_dWsMLS91YmeBxOC75YpVVQ,1048
96
+ foundry_mcp/core/research/workflows/base.py,sha256=yzGMXdYmGDP_RX9rn0LOdwEEc01ntoLvGNZYy0fvras,10254
97
+ foundry_mcp/core/research/workflows/chat.py,sha256=mrMRh2dyYWjxwc2yFNJL-hrqnb4na0yZuovSPz1c_7o,8313
98
+ foundry_mcp/core/research/workflows/consensus.py,sha256=DY7a6T1Yt_BWPz0PekwSILVb6GDw6ftgWP3O-JfUW_k,19326
99
+ foundry_mcp/core/research/workflows/deep_research.py,sha256=92XOjpXMnhSo1hQjAx9Wy4f8TSLyPl7MnDUy5Y8xSVk,156912
100
+ foundry_mcp/core/research/workflows/ideate.py,sha256=SiV9RTIX4hsjmMDNSNRvD77OVYfbV_LGx-8SLmLyggc,22271
101
+ foundry_mcp/core/research/workflows/thinkdeep.py,sha256=5yWhDstcoxPSkxdyblPniXoB6GRqdFNOY-cjtAL-XaQ,14029
102
+ foundry_mcp/dashboard/__init__.py,sha256=3XUgs6JJbcrx37ABvZPosgNzd5oFqdDm7raNDqWkmFs,811
103
+ foundry_mcp/dashboard/app.py,sha256=Ktv0o6nBjtkXF08g2Oq15daR_hgV22vs1DlUZ55kJGI,3004
104
+ foundry_mcp/dashboard/launcher.py,sha256=budmYi7UkJc_bCITfKOCTL9kOO6MdkV87NreNaJTJ8o,8357
105
+ foundry_mcp/dashboard/components/__init__.py,sha256=etYzKPHwfZdYvm9u7s2CPR0VPnBmWHl8FyJ2YoE7mEI,352
106
+ foundry_mcp/dashboard/components/cards.py,sha256=QQTa4dlLyHwAUVe6zBwPoATmyIMXq24kTVRC0Uyvqno,2414
107
+ foundry_mcp/dashboard/components/charts.py,sha256=5iy7916wy9_jD2adePUB1KObUbcyRdMl-ZOwxxtsWsk,3978
108
+ foundry_mcp/dashboard/components/filters.py,sha256=uN7rFrBvZk6oacPcOiexET02BExNM5olWepjCXDrTf8,3061
109
+ foundry_mcp/dashboard/components/tables.py,sha256=WVq_BMbWBGyaIxuvy3qUrH6tBWsJABC5wfulojJNEK0,4873
110
+ foundry_mcp/dashboard/data/__init__.py,sha256=CFz07CIZhmD12kx77Mr2LG0J--b9DTvyu3uaHDJusvI,261
111
+ foundry_mcp/dashboard/data/stores.py,sha256=-2193Vdz1q4Ls2qmP1aQZ7cF1DWRxeCItq4LxJi6UnA,12391
112
+ foundry_mcp/dashboard/views/__init__.py,sha256=12fUzf3TkGMs0dJHfA6Y856qJEO7lOS_hs6msP3xYRs,208
113
+ foundry_mcp/dashboard/views/errors.py,sha256=suDaoQQsnyr2sYOWhN2nNNWIuIBZPkVIHGMlVvYsgr8,7305
114
+ foundry_mcp/dashboard/views/metrics.py,sha256=88Blo0iObfV_2mvhJV1RuqW7K278mn6vVoejonkTiuY,5725
115
+ foundry_mcp/dashboard/views/overview.py,sha256=BqtUVRC44PNXTd_Vu_PxVPZc3kThbytxANNGs3cmOhI,3369
116
+ foundry_mcp/dashboard/views/providers.py,sha256=sFCh-F8xIhLRQQzgjd_dwZz_S6AgolWSmP3iqczxxYE,2819
117
+ foundry_mcp/dashboard/views/sdd_workflow.py,sha256=lKvh8Ru6WBg5nE8vCcNZibemtRvhMoB3P5boK5Sd68M,8281
118
+ foundry_mcp/dashboard/views/tool_usage.py,sha256=-SD9VwhDJ1SRpHkYXDPINenSaLrQAiXRFEvRrp3-HbA,4760
119
+ foundry_mcp/prompts/__init__.py,sha256=AeAFELo1TTBdw4MVg4VoeDWsGGvzFTmdRtHHOBxwVzA,200
120
+ foundry_mcp/prompts/workflows.py,sha256=1bg43V6lEGeGuGX37G49UYGtDjZ6SZqsXguKb_zZQss,18369
121
+ foundry_mcp/resources/__init__.py,sha256=rnxmkQKsDcL-p-NyVlZtEh9Ie2BQn0nzQ_16NuCLBPY,201
122
+ foundry_mcp/resources/specs.py,sha256=HcXxZFJt8eDFTQpshwxC9PLdtYPbOttVGFbT8mLRO5A,19828
123
+ foundry_mcp/schemas/__init__.py,sha256=iKHwedYPusMeg-Ozdeq-gHDT5nhmqEPP-a9jXi8VyOM,1140
124
+ foundry_mcp/schemas/intake-schema.json,sha256=YisuGVRpMhg66lm-_vSs8SMVwjbsyWfXPSv0u4dI5UI,2691
125
+ foundry_mcp/schemas/sdd-spec-schema.json,sha256=VAmeihOuDHldgk-evwjZLPmoRt4o4mVZ1vCZkhWuh74,12480
126
+ foundry_mcp/tools/__init__.py,sha256=yNmGFFGNp-OMA758oAMxB4z7cvXb_6KPxm-ZyHbi-9I,199
127
+ foundry_mcp/tools/unified/__init__.py,sha256=cKkaNLCbe0XI1XlzndTrPZmjgqw1IJuaqv0Go1E67RU,3431
128
+ foundry_mcp/tools/unified/authoring.py,sha256=tMCrc2wXPMtoe5TnpWuyzgqG-c9gKXg9Pur-al18ZmM,127107
129
+ foundry_mcp/tools/unified/context_helpers.py,sha256=JcaEdn1nVgaZ4GfTktRdZ7oD4pHkU9TH6O8WfWJ9lr0,3056
130
+ foundry_mcp/tools/unified/documentation_helpers.py,sha256=LaQRDv4QCZ6C4Mtx_28WnGbx4XHUy-dpDytYkBrS3MY,10419
131
+ foundry_mcp/tools/unified/environment.py,sha256=rUEha9-Uo-0cwLCWxESTo5blQ4aFaDE76KO2XKg2f8w,46063
132
+ foundry_mcp/tools/unified/error.py,sha256=qzkI6GoFs4bfN79-x0fMpS1ogAn3lkdgzGGymUWEmE8,14452
133
+ foundry_mcp/tools/unified/health.py,sha256=8oo61HeTfuyxTYyuKQPLMHvvYh54ju33invxIGFi5s4,6833
134
+ foundry_mcp/tools/unified/journal.py,sha256=mbVivCiJymd6QFq2u1stVkqhLMM7odrpSyU6X9nRnak,23262
135
+ foundry_mcp/tools/unified/lifecycle.py,sha256=RKESL2wEaEHagDl61eRX0y0AivUoaPn8ibcdHunohmw,20436
136
+ foundry_mcp/tools/unified/metrics.py,sha256=Q1vIXLpQnTfHnpFxXKWwqQpNDc2_iuGIr48Bg7EM47c,22600
137
+ foundry_mcp/tools/unified/plan.py,sha256=JbjidFI7rB-i7AoXcI0IkMbN1aCAPXF7jFS_QDZPZYI,30199
138
+ foundry_mcp/tools/unified/pr.py,sha256=L_Gk9oVP-8PgmbdULFr_BwXBPaLRib_55H8MyHuZ_34,9786
139
+ foundry_mcp/tools/unified/provider.py,sha256=rUIrtr4rh0YWEUoSbb-0GpM_Lx0dUuv2ElFvK8F0_O4,20558
140
+ foundry_mcp/tools/unified/research.py,sha256=V7i4DPq20bIDHSVtcat-XDxUTG0P0FXK9t_MnDoEZEA,43863
141
+ foundry_mcp/tools/unified/review.py,sha256=SrZ4hLPd7CPbeNdgOwEiP_te_LQzh7btsKZ6RYAGIs4,37746
142
+ foundry_mcp/tools/unified/review_helpers.py,sha256=4bbhipPPrxYGprJJksjLaR9xPk4IrTpXT-7aIydd3ew,10253
143
+ foundry_mcp/tools/unified/router.py,sha256=sWqAaey9yhiAoxyrnL8lr2reMWyPgmyIPlwrNgZZmRI,3489
144
+ foundry_mcp/tools/unified/server.py,sha256=Krxwz011kXRmpjnUzP3ifwPkFN83tl5fhRczR3j9Isg,19218
145
+ foundry_mcp/tools/unified/spec.py,sha256=k_1IYVKYPoq8s2R87Ars20NeCFco2-Qv6hUypqE2Y0Y,42429
146
+ foundry_mcp/tools/unified/task.py,sha256=TuLinZ4ZYw6637iKYFFduDAX8pJvIiVe3vELgPtjW18,135684
147
+ foundry_mcp/tools/unified/test.py,sha256=7H2UObajxz0vHZ_1HUne4E7hlkVGnigT70SnDlkPlfk,13894
148
+ foundry_mcp/tools/unified/verification.py,sha256=Kq3BJ7-Rnp2R35dHoFSTdwHPjEf60nce8vWMIKOA32s,16945
149
+ foundry_mcp-0.8.22.dist-info/METADATA,sha256=kNsQD-eo_URF6KfL6bH9v6Kcu8orOFiAlTUSPjmv8aU,13901
150
+ foundry_mcp-0.8.22.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
151
+ foundry_mcp-0.8.22.dist-info/entry_points.txt,sha256=EBy4TVvlciNngt9ErVIyNjTImjczKa2FkoZRtIEw6aU,95
152
+ foundry_mcp-0.8.22.dist-info/licenses/LICENSE,sha256=8dabQwxo8HuixKsQaXcVaIHLLQWvPPLuKQFZLAIXL4w,1071
153
+ foundry_mcp-0.8.22.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ foundry-cli = foundry_mcp.cli.main:cli
3
+ foundry-mcp = foundry_mcp.server:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Tyler Burleigh
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.