MCP server that exposes actionable Omniboard checks for the current project to a local agent.
The server resolves the current project name using the same project-resolution
approach as @omniboard/analyzer, retrieves Omniboard settings, then asks the
API for actionable check results for that project.
Required:
OMNIBOARD_API_KEY_MCP=...The MCP server expects this environment variable to be set before the agent is started. The API key must be an Omniboard API key that is allowed to access the MCP endpoints.
Optional:
OMNIBOARD_API_URL=https://api.omniboard.devThe server uses the standard MCP stdio transport. Build the package first:
npm install
npm run buildThen register the built executable with your MCP client.
Use this shape for clients that accept MCP server JSON configuration:
{
"mcpServers": {
"omniboard": {
"command": "npx",
"args": ["@omniboard/mcp"],
"env": {
"OMNIBOARD_API_KEY_MCP": "your-api-key"
}
}
}
}For local development from a checkout:
{
"mcpServers": {
"omniboard": {
"command": "node",
"args": ["/absolute/path/to/mcp/dist/index.js"],
"env": {
"OMNIBOARD_API_KEY_MCP": "your-api-key",
"OMNIBOARD_API_URL": "https://api.omniboard.dev"
}
}
}
}Add an MCP server entry to your Codex config:
[mcp_servers.omniboard]
command = "npx"
args = ["@omniboard/mcp"]
[mcp_servers.omniboard.env]
OMNIBOARD_API_KEY_MCP = "your-api-key"For local development from a checkout:
[mcp_servers.omniboard]
command = "node"
args = ["/absolute/path/to/mcp/dist/index.js"]
[mcp_servers.omniboard.env]
OMNIBOARD_API_KEY_MCP = "your-api-key"
OMNIBOARD_API_URL = "https://api.omniboard.dev"Alternatively, set OMNIBOARD_API_KEY_MCP in the shell environment before
starting the agent and omit the env block from the client config.
Bash:
export OMNIBOARD_API_KEY_MCP="your-api-key"
codexFish:
set -x OMNIBOARD_API_KEY_MCP "your-api-key"
codexPowerShell:
$env:OMNIBOARD_API_KEY_MCP = "your-api-key"
codexReturns the actionable checks that currently have results for the resolved project.
Response:
{
"project": {
"id": 1,
"name": "example-project",
"lastAnalysisDate": "2026-04-27T12:00:00.000Z"
},
"checks": [
{
"name": "UXF",
"type": "content",
"description": "UXF usage detected",
"prompt": "Update the matched usages...",
"value": true
}
]
}Input:
{
"name": "UXF"
}Returns the result context for the check. The API owns the result DTO, so the
MCP passes it through as result.
Response:
{
"project": {
"id": 1,
"name": "example-project"
},
"check": {
"name": "UXF",
"type": "content",
"description": "UXF usage detected",
"actionable": true,
"prompt": "Update the matched usages..."
},
"result": {}
}GET /mcp/checks?projectName=example-projectExpected response:
{
"project": {
"id": 1,
"name": "example-project",
"lastAnalysisDate": "2026-04-27T12:00:00.000Z"
},
"checks": [
{
"name": "UXF",
"type": "content",
"description": "UXF usage detected",
"actionable": true,
"prompt": "Update the matched usages...",
"value": true
}
]
}GET /mcp/result?projectName=example-project&checkName=UXFExpected response:
{
"project": {
"id": 1,
"name": "example-project"
},
"check": {
"name": "UXF",
"type": "content",
"description": "UXF usage detected",
"actionable": true,
"prompt": "Update the matched usages..."
},
"result": {}
}