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:
| Type | Description | Execution Path |
|---|---|---|
| action | Side-effect operations (create, update, delete) | Action Executor with retry and recovery |
| analytical | Read-only aggregation and metrics | Analytics Executor with partial results |
| read | Simple data access | Analytics 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 skipcursor(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
| System | Tools Count | Description |
|---|---|---|
| GitHub | 27 | Repositories, issues, PRs, branches, files, metrics |
| Jira | 24 | Projects, tickets, sprints, transitions, metrics |
| Confluence | 14 | Spaces, 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:
-
Path Parameters: Required parameters in the URL path
- Example:
repo_idin/github/repositories/{repo_id}/issues
- Example:
-
Query Parameters: Optional parameters as URL query strings
- Example:
limit,offset,state
- Example:
-
Body Parameters: For POST/PUT requests
- Example:
title,description,labelsforcreate_issue
- Example:
Optional Repository/Project Parameters
Many tools support parallel execution when the repository or project identifier is omitted:
- GitHub:
repo_idis optional for most list/metrics operations - Jira:
project_keyis optional for list/metrics operations - Confluence:
space_keyis 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:readslackmessage:list,slackmessage:read,slackmessage:create,slackmessage:update,slackmessage:delete
Or use concept-based naming: SlackChannel.list, SlackMessage.send, etc.
Related Documentation
- Confluence API Reference - Confluence tools
- GitHub API Reference - GitHub integration
- Jira API Reference - Jira integration
- Google API Reference - Google Calendar, Gmail, Chat
- Slack API Reference - Slack Channels and Messages
- Ontology Guide - Semantic concepts
- Authentication Guide - JWT setup