Skip to main content

MCP (Model Context Protocol) API

The MCP API provides endpoints for discovering and executing tools dynamically generated from FastAPI routes. Tools are filtered by configuration and enhanced with semantic metadata from the ontology system.

Overview

The MCP API enables:

  • Tool Discovery: List available tools for each system (GitHub, Jira, Confluence)
  • Tool Execution: Execute tools with parameters routed by capability type
  • Capability Types: Tools are classified as action, analytical, or read
  • Semantic Metadata: Tools include semantic descriptions from the ontology
  • LLM Hints: Tools include hints to help LLMs select the right tool
  • Dynamic Generation: Tools are automatically generated from FastAPI routes
  • Parallel Execution: Many tools support parallel fetching across all accessible resources
  • Standardized Pagination: All list endpoints return paginated responses with cursors
  • Analytics Caching: Analytics endpoints support stale-while-revalidate caching with optional refresh

Capability-Based Execution

The MCP layer routes tool execution to the appropriate executor based on capability type:

TypeDescriptionExecution Path
actionSide-effect operations (create, update, delete)Action Executor with retry and recovery
analyticalRead-only aggregation and metricsAnalytics Executor with partial results
readSimple data accessAnalytics Executor (simple path)

This architecture keeps the MCP layer thin and stable while enabling sophisticated execution strategies.


New Features

LLM Hints for Tool Selection

Tools now include llm_hints to help AI assistants select the right tool:

{
"name": "issue.list",
"description": "List issues/tickets from Jira or GitHub",
"llm_hints": {
"aliases": ["ticket", "issue", "bug", "task"],
"when_to_use": "Use for work tracking operations. Triggered by: my tickets, assigned to me, open issues",
"not_for": "Pull requests -> use PullRequest concept",
"examples": [
{ "query": "Show my open tickets", "tool": "issue.list", "params": { "state": "open" } }
]
}
}

Enhanced Domains Endpoint

The /mcp/domains endpoint now includes LLM routing hints:

{
"domains": [
{
"name": "work",
"description": "Issues, tickets, sprints, and project management",
"keywords": ["ticket", "issue", "bug", "task", "sprint", "jira"],
"when_to_use": "Use for issue tracking, tickets, sprints, and project management tasks",
"tool_count": 32
}
]
}

Standardized Pagination

All list endpoints now return paginated responses:

{
"success": true,
"data": {
"items": [...],
"pagination": {
"limit": 50,
"offset": 0,
"total": 150,
"has_more": true,
"next_cursor": "eyJvZmZzZXQiOiA1MH0="
}
}
}

Pagination Parameters:

  • limit (int): Page size (max 100)
  • offset (int): Number of items to skip
  • cursor (string): Pagination cursor from previous response

Analytics Caching

Analytics endpoints support stale-while-revalidate caching:

# Use cached data (default)
curl "/analytics/dora?repo_ids=org/repo"

# Skip cache and refresh
curl "/analytics/dora?repo_ids=org/repo&refresh=true"

Caching Strategy:

  • Fresh data (< 5 minutes): Returned immediately
  • Stale data (5 min - 1 hour): Returned immediately, refreshed in background
  • Expired data (> 1 hour): Computed fresh

Available Systems

SystemTools CountDescription
GitHub27Repositories, issues, PRs, branches, files, metrics
Jira24Projects, tickets, sprints, transitions, metrics
Confluence14Spaces, pages, comments, attachments, labels

Base Endpoint

/mcp

Authentication

MCP endpoints require authentication via JWT token:

X-JWT-Token: <your-jwt-token>

In demo mode, a demo token is automatically created if not provided.


Core Endpoints

Get Available Systems

List all systems that have MCP tools available.

Endpoint: GET /mcp/systems

Authentication: Not required

Request:

curl http://localhost:3007/mcp/systems

Response:

{
"systems": ["github", "jira", "confluence"],
"count": 3
}

Get Capabilities for System

Get all capabilities for a system, optionally filtered by type.

Endpoint: GET /mcp/{system}/capabilities

Path Parameters:

  • system (string, required): System identifier (github, jira, confluence)

Query Parameters:

  • capability_type (string, optional): Filter by type (action, analytical, read)

Authentication: Not required

Request:

# Get all capabilities for GitHub
curl http://localhost:3007/mcp/github/capabilities

# Get only analytical capabilities
curl http://localhost:3007/mcp/github/capabilities?capability_type=analytical

Response:

{
"system": "github",
"capabilities": [
{
"name": "github.analytics.dora_metrics",
"type": "analytical",
"tool": "get_dora_metrics",
"read_only": true,
"side_effects": false,
"requires": ["github"]
},
{
"name": "github.issues.create",
"type": "action",
"tool": "create_issue",
"read_only": false,
"side_effects": true,
"requires": []
}
],
"count": 2
}

Get All Analytical Capabilities

Get all analytical capabilities across all systems.

Endpoint: GET /mcp/capabilities/analytics

Authentication: Not required

Request:

curl http://localhost:3007/mcp/capabilities/analytics

Response:

{
"type": "analytical",
"description": "Read-only operations that aggregate or compute metrics",
"systems": {
"github": [
{
"name": "github.analytics.dora_metrics",
"tool": "get_dora_metrics",
"requires": ["github"],
"outputs": ["deployment_frequency", "lead_time", "change_failure_rate", "mttr"]
},
{
"name": "github.analytics.engineering_metrics",
"tool": "get_eng_metrics",
"requires": ["github"],
"outputs": ["velocity_throughput", "quality_stability", "efficiency", "team_health"]
}
],
"jira": [
{
"name": "jira.analytics.delivery_forecast",
"tool": "get_delivery_forecast",
"requires": ["jira"],
"outputs": ["window_capacity", "completion_prediction", "delivery_confidence", "risks"]
},
{
"name": "jira.analytics.throughput",
"tool": "get_throughput_metrics",
"requires": ["jira"],
"outputs": ["throughput", "cycle_time", "lead_time", "wip", "flow_efficiency"]
}
]
},
"total_count": 15
}

Get Tools for System

Get all available MCP tools for a specific system with their input schemas.

Endpoint: GET /mcp/{system}/tools

Path Parameters:

  • system (string, required): System identifier (github, jira, confluence)

Authentication: Not required

Request:

curl http://localhost:3007/mcp/github/tools

Response:

{
"tools": [
{
"name": "get_repositories",
"description": "List, show, get, fetch, or retrieve all GitHub repositories you can access",
"inputSchema": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Maximum number of results to return"
},
"offset": {
"type": "integer",
"description": "Number of results to skip"
}
},
"required": []
}
}
]
}

Execute Tool

Execute an MCP tool by calling the corresponding internal API endpoint. The executor routes the request based on capability type:

  • action capabilities: Executed with retry/recovery (Action Executor)
  • analytical capabilities: Executed with multi-source aggregation (Analytics Executor)
  • read capabilities: Simple execution (Analytics Executor)

Endpoint: POST /mcp/{system}/execute

Path Parameters:

  • system (string, required): System identifier (github, jira, confluence)

Request Body:

{
"tool": "tool_name",
"arguments": {
"param1": "value1",
"param2": "value2"
}
}

Authentication: Required (JWT token in X-JWT-Token header)

Response:

Responses include _capability metadata indicating the capability type:

{
"success": true,
"data": {
"repositories": [...],
"_capability": {
"name": "github.repositories.list",
"type": "read"
}
}
}

For analytical capabilities, the type indicates the data was computed/aggregated:

{
"success": true,
"data": {
"deployment_frequency": 4.5,
"lead_time_hours": 2.3,
"change_failure_rate": 8.5,
"mttr_hours": 1.2,
"_capability": {
"name": "github.analytics.dora_metrics",
"type": "analytical"
}
}
}

GitHub Tools (27 Tools)

Repository Operations

get_repositories

List all GitHub repositories accessible to the user.

Input Schema:

{
"properties": {
"limit": { "type": "integer", "description": "Maximum results" },
"offset": { "type": "integer", "description": "Results to skip" }
},
"required": []
}

Example Response:

{
"success": true,
"data": {
"repositories": [
{
"id": 123456789,
"name": "my-awesome-repo",
"full_name": "acme-corp/my-awesome-repo",
"description": "An awesome repository",
"url": "https://github.com/acme-corp/my-awesome-repo",
"default_branch": "main",
"private": false,
"language": "TypeScript",
"stargazers_count": 42,
"forks_count": 10
}
],
"count": 1
}
}

get_repository

Get details for a specific repository.

Input Schema:

{
"properties": {
"repo_id": { "type": "string", "description": "Repository in owner/repo format" }
},
"required": ["repo_id"]
}

list_repos_by_user

List repositories for a specific user.

Input Schema:

{
"properties": {
"username": { "type": "string", "description": "GitHub username" },
"limit": { "type": "integer" }
},
"required": ["username"]
}

get_repository_users

List collaborators/users with access to repositories.

Input Schema:

{
"properties": {
"repo_id": { "type": "string", "description": "Optional - if not provided, fetches from all repos" }
},
"required": []
}

get_contributors

List contributors who committed code.

Input Schema:

{
"properties": {
"repo_id": { "type": "string", "description": "Optional - if not provided, aggregates all repos" }
},
"required": []
}

Example Response:

{
"success": true,
"data": {
"contributors": [
{
"login": "johndoe",
"id": 12345,
"contributions": 156,
"avatar_url": "https://avatars.githubusercontent.com/u/12345"
}
],
"total_contributions": 156
}
}

User Operations

get_user_by_email

Look up GitHub user by email address.

Input Schema:

{
"properties": {
"email": { "type": "string", "description": "User email address" }
},
"required": ["email"]
}

Example Response:

{
"success": true,
"data": {
"login": "johndoe",
"id": 12345,
"name": "John Doe",
"email": "john.doe@example.com",
"avatar_url": "https://avatars.githubusercontent.com/u/12345"
}
}

Issue Operations

get_issues

List GitHub issues with optional filters.

Input Schema:

{
"properties": {
"repo_id": { "type": "string", "description": "Optional - fetches from all repos if not provided" },
"state": { "type": "string", "enum": ["open", "closed", "all"] },
"labels": { "type": "array", "items": { "type": "string" } },
"limit": { "type": "integer" }
},
"required": []
}

Example Response:

{
"success": true,
"data": {
"issues": [
{
"id": 789456123,
"number": 42,
"title": "Fix authentication bug",
"body": "Users are unable to login when...",
"state": "open",
"labels": [
{ "name": "bug", "color": "d73a4a" }
],
"assignees": [
{ "login": "janedoe", "id": 67890 }
],
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-20T14:45:00Z"
}
],
"count": 1
}
}

get_issue

Get a specific issue by number.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"issue_number": { "type": "integer" }
},
"required": ["repo_id", "issue_number"]
}

create_issue

Create a new GitHub issue.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"title": { "type": "string" },
"body": { "type": "string", "description": "Issue description" },
"labels": { "type": "array", "items": { "type": "string" } },
"assignees": { "type": "array", "items": { "type": "string" } }
},
"required": ["repo_id", "title"]
}

Example Request:

curl -X POST http://localhost:3007/mcp/github/execute \
-H "Content-Type: application/json" \
-H "X-JWT-Token: <your-jwt-token>" \
-d '{
"tool": "create_issue",
"arguments": {
"repo_id": "acme-corp/api",
"title": "Add rate limiting to API",
"body": "We need to implement rate limiting...",
"labels": ["enhancement", "api"]
}
}'

update_issue

Update an existing issue.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"issue_number": { "type": "integer" },
"title": { "type": "string" },
"body": { "type": "string" },
"state": { "type": "string", "enum": ["open", "closed"] },
"labels": { "type": "array" },
"assignees": { "type": "array" }
},
"required": ["repo_id", "issue_number"]
}

get_issue_comments

List comments on an issue.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"issue_number": { "type": "integer" }
},
"required": ["repo_id", "issue_number"]
}

add_issue_comment

Add a comment to an issue.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"issue_number": { "type": "integer" },
"body": { "type": "string", "description": "Comment text" }
},
"required": ["repo_id", "issue_number", "body"]
}

add_issue_labels

Add labels to an issue.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"issue_number": { "type": "integer" },
"labels": { "type": "array", "items": { "type": "string" } }
},
"required": ["repo_id", "issue_number", "labels"]
}

remove_issue_labels

Remove labels from an issue.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"issue_number": { "type": "integer" },
"labels": { "type": "array", "items": { "type": "string" } }
},
"required": ["repo_id", "issue_number", "labels"]
}

Pull Request Operations

get_pull_requests

List pull requests.

Input Schema:

{
"properties": {
"repo_id": { "type": "string", "description": "Optional - fetches from all repos if not provided" },
"state": { "type": "string", "enum": ["open", "closed", "all", "merged"] },
"limit": { "type": "integer" }
},
"required": []
}

Example Response:

{
"success": true,
"data": {
"pull_requests": [
{
"id": 987654321,
"number": 15,
"title": "Add new authentication flow",
"state": "open",
"draft": false,
"user": { "login": "johndoe" },
"head": { "ref": "feature/new-auth" },
"base": { "ref": "main" },
"created_at": "2024-01-18T09:00:00Z",
"updated_at": "2024-01-20T16:30:00Z",
"additions": 250,
"deletions": 45
}
],
"count": 1
}
}

get_stale_prs

List stale/inactive pull requests.

Input Schema:

{
"properties": {
"repo_id": { "type": "string", "description": "Optional" },
"days_threshold": { "type": "integer", "description": "Days of inactivity (default: 7)" }
},
"required": []
}

create_pull_request

Create a new pull request.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"title": { "type": "string" },
"head": { "type": "string", "description": "Source branch" },
"base": { "type": "string", "description": "Target branch (default: main)" },
"body": { "type": "string" },
"draft": { "type": "boolean" }
},
"required": ["repo_id", "title", "head"]
}

merge_pull_request

Merge a pull request.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"pr_number": { "type": "integer" },
"merge_method": { "type": "string", "enum": ["merge", "squash", "rebase"] },
"commit_message": { "type": "string" }
},
"required": ["repo_id", "pr_number"]
}

Branch & File Operations

create_branch

Create a new branch.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"branch_name": { "type": "string" },
"from_branch": { "type": "string", "description": "Source branch (default: main)" }
},
"required": ["repo_id", "branch_name"]
}

create_or_update_file

Create or update a file in a repository.

Input Schema:

{
"properties": {
"repo_id": { "type": "string" },
"path": { "type": "string", "description": "File path" },
"content": { "type": "string", "description": "File content" },
"message": { "type": "string", "description": "Commit message" },
"branch": { "type": "string" }
},
"required": ["repo_id", "path", "content", "message"]
}

Metrics Operations

get_dora_metrics

Get DORA metrics aggregated across repositories.

Input Schema:

{
"properties": {
"repo_ids": { "type": "string", "description": "Comma-separated repo IDs (optional)" },
"time_period_days": { "type": "integer", "description": "Time period (default: 30)" }
},
"required": []
}

Example Response:

{
"success": true,
"data": {
"deployment_frequency": {
"value": 4.5,
"unit": "deploys_per_week",
"category": "High",
"description": "Average successful workflow runs per week"
},
"lead_time_for_changes": {
"value": 2.3,
"unit": "hours",
"category": "Elite",
"description": "Average time from workflow start to completion"
},
"change_failure_rate": {
"value": 8.5,
"unit": "percent",
"category": "High",
"description": "Percentage of failed workflows"
},
"mean_time_to_recovery": {
"value": 1.2,
"unit": "hours",
"category": "Elite",
"description": "Average time from failure to recovery"
},
"metadata": {
"time_period_days": 30,
"repositories_analyzed": 5
}
}
}

get_dora_metrics_by_repo

Get DORA metrics grouped by repository.


get_developer_metrics

Get developer activity metrics.

Input Schema:

{
"properties": {
"repo_id": { "type": "string", "description": "Optional" },
"time_period_days": { "type": "integer" },
"limit": { "type": "integer" }
},
"required": []
}

Example Response:

{
"success": true,
"data": {
"developers": [
{
"username": "johndoe",
"commits": 45,
"pull_requests": {
"opened": 12,
"merged": 10,
"closed": 1
},
"reviews": 28,
"additions": 3500,
"deletions": 1200
}
],
"period_days": 30
}
}

get_actions_info

Get GitHub Actions CI/CD pipeline status.


get_pr_developer_metrics

Get per-developer PR metrics (size, counts, lead times).


get_pr_merge_time_metrics

Get PR cycle time bottleneck analysis.


get_eng_metrics

Get comprehensive engineering metrics (DORA + SPACE framework).


get_eng_metrics_by_repo

Get engineering metrics grouped by repository.


get_my_github_work

Get all open GitHub work for a user.

Input Schema:

{
"properties": {
"username": { "type": "string", "description": "GitHub username or email address" }
},
"required": ["username"]
}

Example Response:

{
"success": true,
"data": {
"user": "johndoe",
"open_prs": [
{
"repo": "acme-corp/api",
"number": 42,
"title": "Add new feature",
"created_at": "2024-01-20T10:00:00Z"
}
],
"review_requests": [
{
"repo": "acme-corp/frontend",
"number": 38,
"title": "Update UI components",
"author": "janedoe"
}
],
"assigned_issues": [
{
"repo": "acme-corp/api",
"number": 15,
"title": "Fix authentication bug"
}
],
"summary": {
"open_prs": 1,
"reviews_pending": 1,
"assigned_issues": 1
}
}
}

Jira Tools (24 Tools)

Project Operations

get_projects

List all Jira projects.

Input Schema:

{
"properties": {
"limit": { "type": "integer" },
"offset": { "type": "integer" }
},
"required": []
}

Example Response:

{
"success": true,
"data": {
"projects": [
{
"id": "10001",
"key": "PROJ",
"name": "Project Alpha",
"description": "Main project for Alpha team",
"lead": {
"accountId": "abc123",
"displayName": "John Doe"
},
"projectTypeKey": "software"
}
],
"count": 1
}
}

get_project_info

Get project details.

Input Schema:

{
"properties": {
"project_key": { "type": "string" }
},
"required": ["project_key"]
}

get_available_statuses

List workflow statuses for a project.


get_assignable_users

List users who can be assigned to issues.

Input Schema:

{
"properties": {
"project_key": { "type": "string" },
"issue_key": { "type": "string" }
},
"required": []
}

User Operations

get_users

List all Jira users.


get_user_by_email

Look up Jira user by email.

Example Response:

{
"success": true,
"data": {
"accountId": "abc123def456",
"displayName": "John Doe",
"emailAddress": "john.doe@example.com",
"active": true
}
}

get_tickets_by_user

Get tickets assigned to a user.


Ticket Operations

get_tickets

List Jira tickets with filters.

Input Schema:

{
"properties": {
"project_key": { "type": "string", "description": "Optional - fetches all if not provided" },
"project": { "type": "string", "description": "Alias for project_key" },
"assignee_id": { "type": "string" },
"status": { "type": "string" },
"limit": { "type": "integer" }
},
"required": []
}

⚠️ Important: This is a Jira tool. Use project_key, NOT repo_id.

Example Response:

{
"success": true,
"data": {
"tickets": [
{
"id": "10042",
"key": "PROJ-123",
"summary": "Implement user authentication",
"description": "Add OAuth2 authentication flow...",
"status": {
"name": "In Progress",
"category": "indeterminate"
},
"priority": {
"name": "High"
},
"assignee": {
"accountId": "abc123",
"displayName": "John Doe"
},
"created": "2024-01-10T09:00:00.000Z",
"updated": "2024-01-20T14:30:00.000Z"
}
],
"count": 1
}
}

get_ticket

Get single ticket details.

Input Schema:

{
"properties": {
"issue_key": { "type": "string", "description": "e.g., PROJ-123" }
},
"required": ["issue_key"]
}

create_ticket

Create a new Jira ticket.

Input Schema:

{
"properties": {
"project_key": { "type": "string" },
"summary": { "type": "string", "description": "Ticket title" },
"issue_type": { "type": "string", "description": "Task, Bug, Story, Epic" },
"description": { "type": "string" },
"priority": { "type": "string" },
"assignee_id": { "type": "string" },
"labels": { "type": "array" }
},
"required": ["project_key", "summary", "issue_type"]
}

update_ticket

Update an existing ticket.


get_ticket_comments

List comments on a ticket.


add_ticket_comment

Add comment to a ticket.


get_available_transitions

List available workflow transitions.

Example Response:

{
"success": true,
"data": {
"transitions": [
{ "id": "11", "name": "Start Progress", "to": { "name": "In Progress" } },
{ "id": "21", "name": "Done", "to": { "name": "Done" } },
{ "id": "31", "name": "Block", "to": { "name": "Blocked" } }
]
}
}

transition_issue

Transition ticket to new status.

Input Schema:

{
"properties": {
"issue_key": { "type": "string" },
"transition_name": { "type": "string" },
"comment": { "type": "string" }
},
"required": ["issue_key", "transition_name"]
}

assign_issue

Assign ticket to a user.


get_issues_by_status

Get tickets by status.


get_issue_aging

Get ticket aging information.


add_issue_labels / remove_issue_labels

Add or remove labels from tickets.


Metrics Operations

get_developer_metrics

Get developer productivity metrics.

Example Response:

{
"success": true,
"data": {
"developers": [
{
"accountId": "abc123",
"displayName": "John Doe",
"issues": {
"total": 25,
"created": 8,
"resolved": 15,
"in_progress": 2,
"blocked": 0
},
"story_points": {
"total": 45,
"completed": 38,
"average": 3.5
},
"cycle_time": {
"average_hours": 48.5
}
}
]
}
}

get_dora_metrics

Get DORA metrics for Jira projects.


get_sprint_metrics

Get sprint velocity and completion metrics.

Example Response:

{
"success": true,
"data": {
"sprint": {
"id": 42,
"name": "Sprint 23",
"state": "active",
"startDate": "2024-01-15T00:00:00.000Z",
"endDate": "2024-01-29T00:00:00.000Z"
},
"metrics": {
"total_issues": 18,
"completed": 12,
"remaining": 6,
"completion_rate": 66.7,
"story_points": {
"committed": 45,
"completed": 30,
"velocity": 30
}
}
}
}

get_throughput_metrics

Get aggregated throughput metrics.


get_throughput_metrics_by_project

Get per-project throughput metrics.


get_project_productivity_metrics

Get project productivity metrics.


get_developer_ticket_metrics_all_projects

Get comprehensive developer ticket metrics.


get_executive_summary_all_projects

Get executive summary with health scores.

Example Response:

{
"success": true,
"data": {
"period": {
"start": "2024-01-13T00:00:00.000Z",
"end": "2024-01-20T00:00:00.000Z",
"days": 7
},
"health_score": {
"overall": 85,
"category": "Healthy",
"factors": {
"delivery": 90,
"quality": 82,
"velocity": 83
}
},
"delivery": {
"issues_completed": 45,
"story_points_delivered": 120,
"cycle_time_avg_hours": 36.5
},
"risks": [
{
"type": "blocked_issues",
"count": 3,
"description": "3 issues blocked for >48 hours"
}
],
"team_activity": {
"active_developers": 8,
"total_commits": 156
}
}
}

get_my_jira_work

Get all open Jira work for a user.

Input Schema:

{
"properties": {
"user_identifier": { "type": "string", "description": "Email, account_id, or username" }
},
"required": []
}

Confluence Tools (14 Tools)

See the Confluence API Reference for detailed documentation on all 14 Confluence tools.


Tool Execution Details

Parameter Types

Tools accept three types of parameters:

  1. Path Parameters: Required parameters in the URL path

    • Example: repo_id in /github/repositories/{repo_id}/issues
  2. Query Parameters: Optional parameters as URL query strings

    • Example: limit, offset, state
  3. Body Parameters: For POST/PUT requests

    • Example: title, description, labels for create_issue

Optional Repository/Project Parameters

Many tools support parallel execution when the repository or project identifier is omitted:

  • GitHub: repo_id is optional for most list/metrics operations
  • Jira: project_key is optional for list/metrics operations
  • Confluence: space_key is optional for page listings

When omitted, the API fetches data from all accessible resources in parallel.


Error Handling

Tool Not Found

{
"success": false,
"error": "Tool 'invalid_tool' not found in system 'github'"
}

Status Code: 404

Missing Required Parameters

{
"success": false,
"error": "Missing required path parameters: ['repo_id']"
}

Status Code: 400

Authentication Required

{
"success": false,
"error": "X-JWT-Token header is required for this tool"
}

Status Code: 401


Tool Configuration

Tools are configured in ontology.yaml, which serves as the single source of truth for the MCP system:

Domain Configuration

Domains group tools by functional area and include LLM routing hints:

domains:
work:
description: "Issues, tickets, sprints, and project management"
keywords: ["ticket", "issue", "bug", "task", "sprint", "jira"]
when_to_use: "Use for issue tracking..."
systems: [jira, github]
concepts:
- Issue
- Sprint
tools:
jira:
- get_tickets
- get_ticket

Concept Configuration

Concepts define unified entities with operations and LLM hints:

concepts:
Issue:
description: "Work item, bug, or task"
llm_hints:
aliases: ["ticket", "issue", "bug"]
when_to_use: "Use for work tracking operations..."
examples:
- query: "Show my open tickets"
tool: "issue.list"
operations:
list:
description: "List issues/tickets"
type: read
params:
state: { type: string, enum: [open, closed, all] }

Google Services Integration

Google services (Calendar, Gmail, Chat) are integrated into the MCP tool registry. See Google API Reference for complete documentation.

Available Google tools:

  • calendar:list, calendarevent:list, calendarevent:create, etc.
  • email:list, email:send, emailthread:read, etc.
  • chatspace:list, chatmessage:create, etc.

Or use concept-based naming: CalendarEvent.list, Email.send, ChatMessage.create, etc.

Slack Integration

Slack services (Channels, Messages) are integrated into the MCP tool registry. See Slack API Reference for complete documentation.

Available Slack tools:

  • slackchannel:list, slackchannel:read
  • slackmessage:list, slackmessage:read, slackmessage:create, slackmessage:update, slackmessage:delete

Or use concept-based naming: SlackChannel.list, SlackMessage.send, etc.