blue/docs/mcp/README.md
Eric Garcia 36aeb2f889 docs: add install scripts and MCP integration docs
- INSTALL.md: Installation instructions for Blue CLI
- install.sh: Automated install script
- docs/mcp/: MCP server integration documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 16:44:55 -05:00

371 lines
8.8 KiB
Markdown

# Blue MCP Tools
MCP (Model Context Protocol) tools for Claude integration with realm coordination.
## Overview
Blue exposes 8 MCP tools for cross-repo coordination:
| Tool | Description |
|------|-------------|
| `realm_status` | Realm overview with repos, domains, contracts, bindings |
| `realm_check` | Validate contracts and bindings for CI |
| `contract_get` | Get contract details including schema and version |
| `session_start` | Begin a work session |
| `session_stop` | End session with summary |
| `realm_worktree_create` | Create git worktrees for multi-repo work |
| `realm_pr_status` | PR readiness across realm repos |
| `notifications_list` | List contract change notifications |
## Tools Reference
### realm_status
Get an overview of the current realm.
**Parameters:**
- `cwd` (required) - Current working directory (repo path)
**Returns:**
```json
{
"status": "success",
"realm": "aperture",
"current_repo": "blue",
"repos": [
{ "name": "blue", "path": "/path/to/blue", "is_current": true },
{ "name": "fungal", "path": "/path/to/fungal", "is_current": false }
],
"domains": [
{
"name": "s3-access",
"members": ["blue", "fungal"],
"contracts": [
{ "name": "s3-permissions", "version": "1.0.0", "owner": "blue" }
],
"bindings": [
{ "repo": "blue", "role": "Provider", "exports": 1, "imports": 0 },
{ "repo": "fungal", "role": "Consumer", "exports": 0, "imports": 1 }
]
}
],
"notifications": [],
"next_steps": ["Start a session with session_start to track your work"]
}
```
### realm_check
Validate realm contracts and bindings. Suitable for CI pipelines.
**Parameters:**
- `cwd` (required) - Current working directory
- `realm` (optional) - Realm name override
**Returns:**
```json
{
"status": "success",
"realm": "aperture",
"current_repo": "blue",
"valid": true,
"errors": [],
"warnings": [],
"schema_hashes": [
{
"domain": "s3-access",
"contract": "s3-permissions",
"version": "1.0.0",
"schema_hash": "a1b2c3...",
"owner": "blue"
}
],
"notifications": [],
"next_steps": ["All checks passed. Ready to proceed."]
}
```
**Error Types:**
- Missing contracts referenced by bindings
- Invalid semver versions
- Broken imports (version requirements not satisfied)
**Warning Types:**
- Schema changed without version bump (detected via hash)
- Unused contracts
- Deprecated patterns
### contract_get
Get full details for a specific contract.
**Parameters:**
- `cwd` (required) - Current working directory
- `domain` (required) - Domain name
- `contract` (required) - Contract name
**Returns:**
```json
{
"status": "success",
"realm": "aperture",
"domain": "s3-access",
"contract": {
"name": "s3-permissions",
"version": "1.0.0",
"owner": "blue",
"compatibility": {
"backwards": true,
"forwards": false
},
"schema": { "type": "object", "properties": { ... } },
"value": { ... },
"evolution": [
{ "version": "1.0.0", "changes": "Initial release" }
]
},
"bindings": [
{ "repo": "blue", "role": "Provider", "relationship": "exports" },
{ "repo": "fungal", "role": "Consumer", "relationship": "imports", "version_req": ">=1.0.0" }
],
"current_repo": "blue",
"next_steps": ["You own this contract. You can modify it."]
}
```
### session_start
Begin a work session to track activity across domains and contracts.
**Parameters:**
- `cwd` (required) - Current working directory
- `active_rfc` (optional) - RFC being worked on
**Returns:**
```json
{
"status": "success",
"message": "Session started",
"session": {
"id": "sess-18f5a2b3c4d",
"realm": "aperture",
"repo": "blue",
"started_at": "2026-01-24T10:00:00Z",
"active_rfc": "rfc-0042-new-api",
"active_domains": ["s3-access"],
"contracts_modified": ["s3-access/s3-permissions"],
"contracts_watched": []
},
"next_steps": ["Use session_stop when done to get a summary"]
}
```
Session state is stored in `.blue/session` and persists across tool calls.
### session_stop
End the current work session and get a summary.
**Parameters:**
- `cwd` (required) - Current working directory
**Returns:**
```json
{
"status": "success",
"message": "Session ended after 2h 15m",
"summary": {
"id": "sess-18f5a2b3c4d",
"realm": "aperture",
"repo": "blue",
"started_at": "2026-01-24T10:00:00Z",
"ended_at": "2026-01-24T12:15:00Z",
"duration": "2h 15m",
"active_rfc": "rfc-0042-new-api",
"active_domains": ["s3-access"],
"contracts_modified": ["s3-access/s3-permissions"],
"contracts_watched": []
},
"next_steps": ["Start a new session with session_start when ready"]
}
```
### realm_worktree_create
Create git worktrees for coordinated multi-repo development.
**Parameters:**
- `cwd` (required) - Current working directory
- `rfc` (required) - RFC/branch name for worktrees
- `repos` (optional) - Specific repos to include
**Default Behavior:**
Without `repos` specified, the tool selects "domain peers" - repos that share at least one domain with the current repo.
**Returns:**
```json
{
"status": "success",
"rfc": "rfc-0042-new-api",
"realm": "aperture",
"reason": "Domain peers via s3-access",
"created": ["blue", "fungal"],
"paths": {
"blue": "~/.blue/worktrees/aperture/rfc-0042-new-api/blue",
"fungal": "~/.blue/worktrees/aperture/rfc-0042-new-api/fungal"
},
"errors": [],
"next_steps": [
"cd ~/.blue/worktrees/aperture/rfc-0042-new-api/blue to start working",
"Use session_start to track your work"
]
}
```
Worktrees are created under `~/.blue/worktrees/<realm>/<rfc>/`.
### realm_pr_status
Check PR readiness across all realm repos.
**Parameters:**
- `cwd` (required) - Current working directory
- `rfc` (optional) - Filter by RFC branch
**Returns:**
```json
{
"status": "success",
"realm": "aperture",
"current_repo": "blue",
"rfc": "rfc-0042-new-api",
"repos": [
{
"name": "blue",
"path": "/path/to/blue",
"is_current": true,
"uncommitted_changes": 0,
"commits_ahead": 2,
"pr": {
"number": 42,
"state": "OPEN",
"url": "https://git.example.com/blue/pulls/42",
"title": "RFC 0042: New API"
},
"ready": false
},
{
"name": "fungal",
"path": "/path/to/fungal",
"is_current": false,
"uncommitted_changes": 3,
"commits_ahead": 0,
"pr": null,
"ready": false
}
],
"summary": {
"all_clean": false,
"all_pushed": false,
"ready_for_pr": false
},
"next_steps": [
"Commit changes in repos with uncommitted files",
"Push commits to remote branches"
]
}
```
### notifications_list
List contract change notifications with state filters.
**Parameters:**
- `cwd` (required) - Current working directory
- `state` (optional) - Filter: "pending", "seen", "expired", or "all" (default)
**Notification States:**
- `pending` - Not yet seen by current repo
- `seen` - Acknowledged (marked on first piggyback delivery)
- `expired` - Older than 7 days (auto-cleaned)
**Returns:**
```json
{
"status": "success",
"realm": "aperture",
"current_repo": "fungal",
"filter": "pending",
"notifications": [
{
"id": "notif-123",
"realm": "aperture",
"domain": "s3-access",
"contract": "s3-permissions",
"from_repo": "blue",
"change_type": "VersionChanged",
"changes": { "old_version": "1.0.0", "new_version": "1.1.0" },
"created_at": "2026-01-24T12:00:00Z",
"state": "pending"
}
],
"summary": {
"total": 1,
"pending": 1,
"seen": 0,
"expired_cleaned": 0
},
"next_steps": ["1 pending notification to review"]
}
```
## Notification Piggybacking
`realm_status` and `realm_check` automatically include pending notifications in their response. This provides natural discovery without explicit polling.
```json
{
"result": { ... },
"notifications": [
{ "id": "notif-123", "domain": "s3-access", "contract": "s3-permissions", ... }
],
"next_steps": ["1 pending notification to review"]
}
```
## Guided Workflow
All tools return `next_steps` suggestions based on current state:
```json
{
"result": { ... },
"next_steps": [
"Run realm_check to validate changes",
"Contract s3-permissions was updated - review changes"
]
}
```
## Error Handling
All tools return errors in a consistent format:
```json
{
"status": "error",
"message": "Not in a realm repo. Run 'blue realm admin join <realm>' first.",
"next_steps": ["Join a realm with 'blue realm admin join <realm-name>'"]
}
```
## Context Detection
Tools automatically detect context from:
1. **Current directory** - Reads `.blue/config.yaml` for realm/repo membership
2. **Active session** - Reads `.blue/session` for session state
3. **Daemon database** - Queries `~/.blue/daemon.db` for notifications
No explicit realm parameter is needed in most cases.