Daedalus MCP
by juyagu1
README.md
# Daedalus MCP
Daedalus MCP is a local Model Context Protocol (MCP) server for creating and running specialized engineering agents per project or workspace.
It is designed for workspaces that may contain:
- a single backend service;
- several related microservices;
- a frontend + BFF + backend setup;
- a monorepo or folder with multiple related projects.
Daedalus scans the current workspace, detects the projects and their technologies, creates reusable agent templates, generates project-specific rules/knowledge, and lets you run sequential agent pipelines such as planning, rules validation, performance review, and architecture review.
## Main idea
Given a workspace like:
```txt
workspace/
catalog/
data-mirror/
vendors-bff/
admin-ui/
```
Daedalus can detect stacks such as Java/Spring Boot or Angular and create:
```txt
workspace/
.engineering-agents/
workspace.agents.yaml
catalog/
agents.config.yaml
agents/
plan/
rules/
performance/
architecture/
admin-ui/
agents.config.yaml
agents/
plan/
rules/
performance/
architecture/
```
Reusable templates live inside this MCP project:
```txt
templates/
java21-spring-boot-plan/
typescript-angular-plan/
project-rules-validator/
performance-jvm/
performance-web-node/
architecture-microservice/
architecture-frontend/
```
Daedalus does **not overwrite existing files by default**.
## Available MCP prompts / slash commands
Daedalus also registers MCP prompts named `daedalus` and `daedalus-init`. In clients that expose MCP prompts as slash commands, you can use:
```txt
/daedalus init
/daedalus listProjects
/daedalus plan --group:java-all "agregar healthcheck estándar"
/daedalus review --group:java-all "revisar el diff actual"
```
If the client says the slash command does not exist, use natural language or the `daedalus` tool directly, for example: “Use Daedalus and run `/daedalus init`”. Slash command availability is controlled by the host client, not by the MCP server alone.
## Available MCP tools
### `daedalus_init`
Scans the current workspace and initializes agents.
Equivalent slash-style command:
```txt
/daedalus init
```
What it does:
1. Detects the current workspace from MCP roots or `cwd`.
2. Finds projects inside the workspace.
3. Detects language, framework, build tool, package manager and architecture.
4. Creates missing reusable templates.
5. Creates `agents.config.yaml` and `agents/` inside each detected project.
6. Creates workspace groups like `all`, `java-all`, `angular-all`, etc.
Options:
```ts
{
workspacePath?: string,
force?: boolean,
refreshProjectKnowledge?: boolean,
refreshTemplates?: boolean,
maxDepth?: number
}
```
### `daedalus_listProjects`
Lists projects detected by the last init.
Slash-style command:
```txt
/daedalus listProjects
```
### `daedalus_listGroups`
Lists generated project groups.
Slash-style command:
```txt
/daedalus listGroups
```
Examples of groups:
```txt
all
java-all
java21-spring-boot-all
spring-boot-all
angular-all
typescript-all
```
### `daedalus_run`
Runs an agent pipeline over a group or selected projects.
Slash-style examples:
```txt
/daedalus plan --group:java-all "agregar healthcheck estándar"
```
```txt
/daedalus plan --group:angular-all "agregar healthcheck estándar"
```
```txt
/daedalus plan --group:all "agregar healthcheck estándar"
```
```txt
/daedalus plan --project [catalog,data-mirror,vendors-bff] "agregar healthcheck estándar"
```
The report includes the response from every agent for every selected project.
Default `plan` pipeline:
```txt
plan -> rules -> performance -> architecture
```
### `daedalus_review`
Runs the code-review pipeline over a group or selected projects. It reviews code, diffs, files or change descriptions using language/framework best practices and project-specific rules.
Slash-style examples:
```txt
/daedalus review --group:java-all "revisar el diff actual"
```
```txt
/daedalus review --project [catalog,data-mirror] "revisar cambios de healthcheck"
```
Default `review` pipeline:
```txt
code-review -> rules -> performance -> architecture
```
### `daedalus`
Convenience parser for slash-style commands.
Input example:
```json
{
"command": "/daedalus plan --group:java-all \"agregar healthcheck estándar\""
}
```
Legacy aliases `agent` and `agent_init` are also available, but `/daedalus` is preferred.
## Installation from local checkout
### 1. Clone the repository
```bash
git clone https://github.com/daedalus/daedalus-mcp.git
cd daedalus-mcp
```
> Replace the URL with the real repository URL if different.
### 2. Install dependencies
```bash
npm install
```
### 3. Build
```bash
npm run build
```
### 4. Link the local binary
```bash
npm link
```
This exposes:
```bash
daedalus-mcp
```
Verify:
```bash
which daedalus-mcp
```
If your MCP client does not inherit your shell `PATH`, use the absolute path returned by `which daedalus-mcp`.
## Add to Codex
Edit:
```bash
~/.codex/config.toml
```
Add:
```toml
[mcp_servers.daedalus]
command = "daedalus-mcp"
startup_timeout_sec = 60
```
If Codex cannot find `daedalus-mcp`, use the absolute path:
```toml
[mcp_servers.daedalus]
command = "/absolute/path/to/daedalus-mcp"
startup_timeout_sec = 60
```
Restart Codex.
## Claude Code slash command `/daedalus`
Claude Code slash commands are client-side prompt files. If `/daedalus` is not recognized even though the MCP server is running, create this user-level command:
```bash
mkdir -p ~/.claude/commands
cat > ~/.claude/commands/daedalus.md <<'EOF'
---
description: Run Daedalus MCP commands
allowed-tools: mcp__daedalus__daedalus, mcp__daedalus__daedalus_init, mcp__daedalus__daedalus_listProjects, mcp__daedalus__daedalus_listGroups, mcp__daedalus__daedalus_run
---
Use the Daedalus MCP server. Run the MCP tool `daedalus` with:
```json
{ "command": "/daedalus $ARGUMENTS" }
```
If `$ARGUMENTS` is empty, use `/daedalus init`. Summarize the MCP result for the user.
EOF
```
Restart Claude Code after creating or changing this file. Then use:
```txt
/daedalus init
/daedalus listProjects
/daedalus plan --group:java-all "agregar healthcheck estándar"
/daedalus review --group:java-all "revisar el diff actual"
```
## Add to Claude Desktop
Edit:
```bash
~/Library/Application Support/Claude/claude_desktop_config.json
```
Add the server inside `mcpServers`:
```json
{
"mcpServers": {
"daedalus": {
"command": "daedalus-mcp"
}
}
}
```
If Claude cannot find `daedalus-mcp`, use the absolute path:
```json
{
"mcpServers": {
"daedalus": {
"command": "/absolute/path/to/daedalus-mcp"
}
}
}
```
Restart Claude Desktop.
## Prompt to install from another Codex/Claude chat
Once this project is published, you can open a new Codex or Claude chat and say something like:
```txt
Install the Daedalus MCP from https://github.com/daedalus/daedalus-mcp.
Clone it, run npm install, npm run build, npm link, and add it as an MCP server named daedalus using the daedalus-mcp command. Then restart or tell me to restart the client.
```
For Codex specifically:
```txt
Install the MCP server from https://github.com/daedalus/daedalus-mcp and add this to ~/.codex/config.toml:
[mcp_servers.daedalus]
command = "daedalus-mcp"
startup_timeout_sec = 60
```
For Claude Desktop specifically:
```txt
Install the MCP server from https://github.com/daedalus/daedalus-mcp and add it to ~/Library/Application Support/Claude/claude_desktop_config.json under mcpServers as:
"daedalus": {
"command": "daedalus-mcp"
}
```
## Typical usage
After adding the MCP server and restarting the client, open a chat in the target workspace and run:
```txt
Use Daedalus and run /daedalus init
```
Then inspect what was detected:
```txt
Use Daedalus and run /daedalus listProjects
```
```txt
Use Daedalus and run /daedalus listGroups
```
Run a plan for all Java projects:
```txt
Use Daedalus and run /daedalus plan --group:java-all "agregar healthcheck estándar"
```
Run a code review for all Java projects:
```txt
Use Daedalus and run /daedalus review --group:java-all "revisar el diff actual"
```
Run a plan for specific projects:
```txt
Use Daedalus and run /daedalus plan --project [catalog,data-mirror,vendors-bff] "agregar healthcheck estándar"
```
## Generated files
### Workspace config
```txt
.engineering-agents/workspace.agents.yaml
```
Contains detected projects and groups.
### Per-project config
```txt
agents.config.yaml
```
Contains project metadata, agents and pipelines.
### Per-project agents
```txt
agents/
plan/
prompt.md
agent.yaml
knowledge/
general/
project/
rules/
performance/
architecture/
```
### Reusable templates
```txt
templates/
```
Templates are shared by technology/version/architecture and reused across projects.
## Development
```bash
npm install
npm run build
```
Run directly:
```bash
npm start
```
Type-check:
```bash
npx tsc --noEmit
```
## Notes
- Daedalus uses MCP `roots/list` when available to identify the workspace opened in the client.
- If roots are unavailable, it falls back to the process `cwd`.
- `workspacePath` can be provided manually as an override.
- Existing generated files are preserved by default. If a previous init generated stale project knowledge, rerun init with `refreshProjectKnowledge: true` to regenerate generated `knowledge/general` and `knowledge/project` files.
- Pipeline execution uses MCP sampling when the host supports it. Some hosts return `MCP error -32601: Method not found` for sampling; in that case Daedalus now catches it and returns a handoff report with the prepared agent prompts/context so the host assistant can execute the reasoning in its final response.
TDQS
C2.3/5.0
Scored across 7 tools
Disambiguation2/5
Multiple tools serve as aliases (agent vs daedalus, agent_init vs daedalus_init), causing ambiguity. An agent can't easily distinguish which parser to use for command interpretation.
Naming Consistency2/5
Names mix daedalus_ prefix (daedalus_init, daedalus_listGroups) with bare names (agent, agent_init) and inconsistent styles (agent vs daedalus). No uniform pattern.
Tool Count4/5
7 tools is appropriate for a project management assistant, covering initialization, listing, and execution. Not excessive or insufficient.
Completeness3/5
Core operations (init, list, run) are present, but missing update/delete actions for projects or groups. Coverage is adequate but not full CRUD.
Maintenance
ActivityInactive
ResponsivenessNo issues