agent-hub-mcp
Version:
Universal AI agent coordination platform based on Model Context Protocol (MCP)
256 lines (253 loc) • 8.68 kB
text/typescript
import { Tool } from '@modelcontextprotocol/sdk/types.js';
import { FeaturePriority, FeatureStatus, MessagePriority, MessageType } from '~/types';
export const TOOLS: Tool[] = [
{
name: 'register_agent',
description: 'Register an agent with the hub',
inputSchema: {
type: 'object',
properties: {
id: {
type: 'string',
description:
'Agent identifier (optional - will be generated from project path if not provided)',
},
projectPath: { type: 'string', description: 'Agent working directory' },
role: { type: 'string', description: 'Agent role description' },
capabilities: {
type: 'array',
items: { type: 'string' },
description: 'Agent capabilities',
default: [],
},
collaboratesWith: {
type: 'array',
items: { type: 'string' },
description: 'Expected collaborators',
default: [],
},
},
required: ['projectPath', 'role'],
},
},
{
name: 'send_message',
description: 'Send a message to another agent or broadcast to all agents',
inputSchema: {
type: 'object',
properties: {
from: { type: 'string', description: 'Source agent identifier' },
to: { type: 'string', description: 'Target agent identifier or "all" for broadcast' },
type: {
type: 'string',
enum: Object.values(MessageType),
description: 'Message type',
},
content: { type: 'string', description: 'Message content' },
metadata: { type: 'object', description: 'Additional structured data' },
priority: {
type: 'string',
enum: Object.values(MessagePriority),
description: 'Message priority',
default: MessagePriority.NORMAL,
},
threadId: { type: 'string', description: 'Optional conversation thread ID' },
},
required: ['from', 'to', 'type', 'content'],
},
},
{
name: 'get_messages',
description: 'Retrieve messages for an agent',
inputSchema: {
type: 'object',
properties: {
agent: { type: 'string', description: 'Agent identifier to get messages for' },
markAsRead: {
type: 'boolean',
description: 'Mark retrieved messages as read',
default: true,
},
type: {
type: 'string',
enum: Object.values(MessageType),
description: 'Filter by message type',
},
since: { type: 'number', description: 'Get messages since timestamp' },
},
required: ['agent'],
},
},
{
name: 'get_hub_status',
description: 'Get overview of hub activity, agents, and collaboration opportunities',
inputSchema: {
type: 'object',
properties: {},
},
},
{
name: 'create_feature',
description: 'Create a new feature for multi-agent collaboration',
inputSchema: {
type: 'object',
properties: {
name: { type: 'string', description: 'Feature name (will be converted to kebab-case ID)' },
title: { type: 'string', description: 'Human-readable feature title' },
description: { type: 'string', description: 'Detailed feature requirements and context' },
priority: {
type: 'string',
enum: Object.values(FeaturePriority),
description: 'Feature priority level',
default: FeaturePriority.NORMAL,
},
estimatedAgents: {
type: 'array',
items: { type: 'string' },
description: 'Agents expected to be needed for this feature',
default: [],
},
createdBy: { type: 'string', description: 'Agent creating this feature' },
},
required: ['name', 'title', 'description', 'createdBy'],
},
},
{
name: 'create_task',
description: 'Create a task within a feature with agent delegations',
inputSchema: {
type: 'object',
properties: {
featureId: { type: 'string', description: 'Feature ID to create task in' },
title: { type: 'string', description: 'Task title' },
description: { type: 'string', description: 'Detailed task requirements' },
delegations: {
type: 'array',
items: {
type: 'object',
properties: {
agent: { type: 'string', description: 'Agent ID to delegate to' },
scope: { type: 'string', description: 'What this agent should accomplish' },
},
required: ['agent', 'scope'],
},
description: 'Agent delegations for this task',
},
createdBy: { type: 'string', description: 'Agent creating this task' },
},
required: ['featureId', 'title', 'description', 'delegations', 'createdBy'],
},
},
{
name: 'create_subtask',
description: 'Create implementation subtasks within a delegation',
inputSchema: {
type: 'object',
properties: {
featureId: { type: 'string', description: 'Feature ID' },
delegationId: { type: 'string', description: 'Delegation ID to create subtasks for' },
subtasks: {
type: 'array',
items: {
type: 'object',
properties: {
title: { type: 'string', description: 'Subtask title' },
description: { type: 'string', description: 'Subtask description' },
dependsOn: {
type: 'array',
items: { type: 'string' },
description: 'Subtask IDs this depends on',
default: [],
},
},
required: ['title'],
},
description: 'Subtasks to create',
},
createdBy: { type: 'string', description: 'Agent creating these subtasks' },
},
required: ['featureId', 'delegationId', 'subtasks', 'createdBy'],
},
},
{
name: 'get_features',
description: 'Get list of features with optional filtering',
inputSchema: {
type: 'object',
properties: {
status: {
type: 'string',
enum: Object.values(FeatureStatus),
description: 'Filter by feature status',
},
priority: {
type: 'string',
enum: Object.values(FeaturePriority),
description: 'Filter by feature priority',
},
agent: { type: 'string', description: 'Filter features assigned to this agent' },
createdBy: { type: 'string', description: 'Filter features created by this agent' },
},
},
},
{
name: 'get_feature',
description: 'Get complete feature data including tasks, delegations, and subtasks',
inputSchema: {
type: 'object',
properties: {
featureId: { type: 'string', description: 'Feature ID to retrieve' },
},
required: ['featureId'],
},
},
{
name: 'accept_delegation',
description: 'Accept a delegation assigned to an agent',
inputSchema: {
type: 'object',
properties: {
featureId: { type: 'string', description: 'Feature ID' },
delegationId: { type: 'string', description: 'Delegation ID to accept' },
agentId: { type: 'string', description: 'Agent accepting the delegation' },
},
required: ['featureId', 'delegationId', 'agentId'],
},
},
{
name: 'update_subtask',
description: 'Update subtask status and provide output/context',
inputSchema: {
type: 'object',
properties: {
featureId: { type: 'string', description: 'Feature ID' },
subtaskId: { type: 'string', description: 'Subtask ID to update' },
status: {
type: 'string',
enum: ['todo', 'in-progress', 'completed', 'blocked'],
description: 'New subtask status',
},
output: { type: 'string', description: 'Output or context for other agents' },
blockedReason: { type: 'string', description: 'Reason if status is blocked' },
updatedBy: { type: 'string', description: 'Agent updating this subtask' },
},
required: ['featureId', 'subtaskId', 'updatedBy'],
},
},
{
name: 'sync',
description: 'Comprehensive sync with the hub - get messages, workload, and status in one call',
inputSchema: {
type: 'object',
properties: {
agentId: { type: 'string', description: 'Agent ID to sync for' },
markAsRead: {
type: 'boolean',
description: 'Mark retrieved messages as read',
default: true,
},
},
required: ['agentId'],
},
},
];