AIDA MCP server - Developer actions (lint, test, typecheck) for monorepos
Project description
AIDA (AI Developer Assistant)
FastMCP server (aida-mcp) that exposes GoodData's unified validation workflow (plus GitHub helpers and rules retrieval) over the MCP protocol. Use it from Cursor, Claude Code, JetBrains AI, or the CLI to run repo-configured lint/type/test/codegen pipelines without memorizing each project's workflow.
TL;DR – Getting Started
Cursor / Claude Code / JetBrains AI
| Step | Command | Notes |
|---|---|---|
| 1 | cd packages/aida-mcp && make install |
Installs/updates the packaged MCP server (wheel) only. |
| 2 | aida-mcp init (run in your repo root) |
Writes repo-local MCP config stubs (e.g. .cursor/mcp.json, .mcp.json) and onboarding files. Add --vendor-rules to enable vendor/example embedded rules. |
| 3 | Restart IDE / Agent | Tools appear as aida in the MCP panel. |
| 4 | Ask your assistant to "validate " | The assistant calls the right tool automatically. |
Need the full local setup (Node, uv, multi-repo tips, troubleshooting)? See CONTRIBUTING.md.
Repo Config Files
AIDA reads repo-owned policy and routing from .aida/:
change_domains.yamlvalidation_policy.yamlvalidation_registry.yamlgit_policy.yaml(commit/PR/workflow knobs for git-related tools)rules/**/*.mdc
aida-mcp init bootstraps these files when missing.
Tool Overview
| Tool | Highlights |
|---|---|
validate |
Unified validation tool. Computes scope (pre_commit / pre_push), routes via .aida/*, executes registry-defined commands with streaming progress. |
get_rules |
Retrieves relevant rules for the current task (hybrid lexical + embeddings), with transparent scoring/debug output. |
github_ci_errors |
Fetch size-capped CI failures for a PR (errors-only by default). |
github_comments |
List/reply/resolve PR review threads (non-interactive). |
Progress Tracking: validate streams real-time progress updates to Cursor using combined ctx.report_progress() + ctx.info() events. External validators can emit AIDA_EVENT {json} lines for richer progress while keeping full logs in artifacts.
Detailed behavior (step descriptions, parameters, and usage snippets) now lives in docs/validation-tools.md to keep this README short. If you only need the external command contract and config shape, start with docs/external-validation-interface.md. Rules retrieval details live in docs/rules-retrieval.md.
Architecture at a Glance
packages/aida-mcp/
├── src/
│ └── app/
│ ├── server/ # FastMCP entrypoint + tool registration
│ ├── tools/
│ │ ├── core/ # shared primitives (registry, change classifier, external tool helpers)
│ │ └── validate/ # unified validate engine (policy + external command execution)
│ └── utils/ # command runner, config loader, junit parsing, progress, timing, etc.
├── config/ # bundled defaults (registry, tool configs)
├── docs/ # detailed validation tool documentation
├── tests/ # unit + integration suites
└── CONTRIBUTING.md # setup, workflows, troubleshooting
Validation design:
- AIDA is language-agnostic for validation command execution.
- Validation commands are repo-owned external executables configured in
.aida/validation_registry.yaml. - Output processors remain built-in and reusable inside
packages/aida-mcp.
Using the Tools
From Cursor / Claude
- Install/update the MCP server via
cd packages/aida-mcp && make install. - Onboard the repo you want to use AIDA in via
aida-mcp init(run in the repo root). - In the editor, ask: “run validation” or “validate
microservices/gen-ai”. The assistant callsvalidate(scope=..., focus_paths=...). - Routing and the exact commands run are repo-owned via
.aida/*.
From the terminal
cd packages/aida-mcp
aida-mcp # launches stdio server manually (once installed via uv tool)
Commit helper (enforces footer policy and 70-char subject limit):
aida-mcp commit \
--type chore \
--scope aida \
--title "add commit helper command" \
--body "Enforce risk footer ordering and metadata trailers." \
--jira DX-123 \
--risk nonprod
Prefer running the command directly in this shape; do not probe with aida-mcp commit --help unless troubleshooting.
Optional metadata in the footer block:
--co-authored-by "Name <email>"(repeatable)--ai-share actor=percent(repeatable, must sum to 100)--ai-share-auto <actor>for deterministic<actor>=100without guessing (policy-gated)- multiline body support:
--body-file /path/to/body.txt--body-stdin(pipe or heredoc)--body-line ...(repeatable)
aida-mcp commit policy values (for example title length, allowed risk: values, and optional required trailers) are configurable via .aida/git_policy.yaml.
Co-authored-by is explicit-only: pass --co-authored-by when available; if omitted, no co-author trailer is added.
Validation CLI shortcuts still live in the repo root:
make format-fix lint-fix
make types
make test
make validate # fast default (format/lint/types + unit tests)
make validate-all # includes integration tests (slow)
Troubleshooting & Workflow Guides
Rather than duplicating multiple pages of instructions here, refer to:
- CONTRIBUTING.md: environment prep, Cursor integration, node/uv requirements, manual overrides, and how to add new tools/rules.
- docs/validation-tools.md: deep dive into each tool’s steps, parameters, and best practices.
- Developer onboarding docs under
docs/developer/for broader GoodData setup.
FAQ
Why a single validate tool?
Repo-owned routing (.aida/*) lets aida-mcp live in a separate repo while still executing GoodData-specific validations (often via external wrappers) with streaming progress.
Can I add custom output processors as external commands?
Not in unified validate today. Processors are built-in only; for custom behavior, either emit JSON consumed by external_json or add a new reusable built-in processor in packages/aida-mcp.
Can I run Docker/OpenAPI without rewriting commands?
Yes—when the repo’s .aida/validation_policy.yaml routes those steps. Add dedicated pipelines/commands for docker/openapi when needed.
What happens if the MCP client disconnects during validation? The server gracefully handles invalid or closed MCP contexts. Progress updates are silently skipped if the context becomes unavailable, preventing server crashes. Validation continues to completion and returns results normally.
What if Python tests fail with "duplicate file name metadata.proto"?
The Python validator automatically detects this common issue (stale protobuf artifacts in .venv) and runs make ultra-clean + make dev to rebuild the environment, then retries the test step. This recovery is transparent and only triggers when needed.
How do I extend validation routing?
Update .aida/change_domains.yaml + .aida/validation_policy.yaml, and add commands in .aida/validation_registry.yaml as needed.
Upgrading / breaking changes
When AIDA source changes in a way that affects the MCP server executable, the installed tool set, or the MCP tool schema, you must reinstall/refresh the MCP server setup in your client.
- Action: rerun
cd packages/aida-mcp && make install, then restart/reload your client. - Why: clients cache the MCP server command + environment from MCP config files. Reinstall ensures the client points at the current
aida-mcpexecutable and tool definitions.
Repository setup
This repository is AIDA-ready (repo-owned .aida/ and repo-local MCP stubs are committed), so you can install the tool and start using it immediately.
Happy validating! Let the assistants run the noisy commands so you can stay focused on the code. For contributions, open an issue or follow the checklist in CONTRIBUTING.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aida_mcp-0.1.2.dev1.tar.gz.
File metadata
- Download URL: aida_mcp-0.1.2.dev1.tar.gz
- Upload date:
- Size: 115.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfbc25cd534362352cf0bf9ff65c4f221bc86a6f2c096805ae9756ab4ecfde60
|
|
| MD5 |
2087d217969612dc22c665554f99851e
|
|
| BLAKE2b-256 |
80be66c580a6a7979a90dff0a003aab9d4494a9b45da1156b01cd0d56f60696b
|
Provenance
The following attestation bundles were made for aida_mcp-0.1.2.dev1.tar.gz:
Publisher:
python-dev-release.yaml on gooddata/gdc-aida
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aida_mcp-0.1.2.dev1.tar.gz -
Subject digest:
bfbc25cd534362352cf0bf9ff65c4f221bc86a6f2c096805ae9756ab4ecfde60 - Sigstore transparency entry: 991666752
- Sigstore integration time:
-
Permalink:
gooddata/gdc-aida@96f016363f1437d14eea15b49d54b6ba12827d52 -
Branch / Tag:
refs/tags/v0.1.2.dev1 - Owner: https://github.com/gooddata
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-dev-release.yaml@96f016363f1437d14eea15b49d54b6ba12827d52 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aida_mcp-0.1.2.dev1-py3-none-any.whl.
File metadata
- Download URL: aida_mcp-0.1.2.dev1-py3-none-any.whl
- Upload date:
- Size: 167.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8bcc5b8767415811b83d37a0a070aa9cc64407a280e493daa6dfe450c035e01
|
|
| MD5 |
4d621eeeb6f94dd9b383eeca63537ee8
|
|
| BLAKE2b-256 |
8c7bf326cc1d88c9a73a6c4e788c38813d419f496e7f9ce1697b2019c267940c
|
Provenance
The following attestation bundles were made for aida_mcp-0.1.2.dev1-py3-none-any.whl:
Publisher:
python-dev-release.yaml on gooddata/gdc-aida
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aida_mcp-0.1.2.dev1-py3-none-any.whl -
Subject digest:
e8bcc5b8767415811b83d37a0a070aa9cc64407a280e493daa6dfe450c035e01 - Sigstore transparency entry: 991666758
- Sigstore integration time:
-
Permalink:
gooddata/gdc-aida@96f016363f1437d14eea15b49d54b6ba12827d52 -
Branch / Tag:
refs/tags/v0.1.2.dev1 - Owner: https://github.com/gooddata
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-dev-release.yaml@96f016363f1437d14eea15b49d54b6ba12827d52 -
Trigger Event:
push
-
Statement type: