Skip to main content

Skills API Reference

REST API endpoints for managing skills and agent-skill assignments. All endpoints require authentication and appropriate permissions.

Authentication

All requests require a valid JWT token in the Authorization header or session cookie. See Authentication for details.

Permissions

PermissionRequired For
skills:readList, get, search skills
skills:writeAssign, unassign, update assignments

Endpoints

List Skills

GET /api/skills

Returns all skills available to the authenticated tenant.

Query Parameters:

ParameterTypeDefaultDescription
categorystringFilter by category (e.g., engineering, sales)
statusstringactiveFilter by status: active, archived, all
limitnumber100Max results to return

Response:

{
"skills": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "terraform",
"slug": "terraform",
"description": "Expert Terraform/OpenTofu Infrastructure as Code...",
"category": "engineering",
"toolIds": ["mcp-terraform-plan", "mcp-terraform-apply"],
"config": {},
"listingRef": null,
"listingVersion": null,
"locked": false,
"currentVersion": "1.0.0",
"status": "active",
"createdAt": "2026-01-15T10:00:00Z",
"updatedAt": "2026-02-01T14:30:00Z",
"source": "custom",
"assignedAgentsCount": 3
}
],
"total": 42
}

source field: "custom" for tenant-created skills, "store" for skills purchased from the Store.


Get Skill Categories

GET /api/skills/categories

Returns distinct categories used by the tenant's skills.

Response:

{
"categories": ["engineering", "sales", "support", "finance"]
}

Get Skill Details

GET /api/skills/:id

Returns full skill details including assigned agents.

Response:

{
"skill": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "terraform",
"slug": "terraform",
"description": "Expert Terraform/OpenTofu Infrastructure as Code...",
"category": "engineering",
"toolIds": [],
"config": {},
"listingRef": null,
"listingVersion": null,
"locked": false,
"currentVersion": "1.0.0",
"status": "active",
"createdAt": "2026-01-15T10:00:00Z",
"updatedAt": "2026-02-01T14:30:00Z",
"source": "custom"
},
"assignedAgents": [
{
"agentId": "agent-123",
"agentName": "DevOps Agent",
"enabled": true,
"assignedAt": "2026-01-20T09:00:00Z"
}
]
}

Errors:

StatusBodyCause
404{ "error": "Skill not found" }Skill ID doesn't exist or belongs to another tenant

Get Skill's Assigned Agents

GET /api/skills/:id/agents

Returns all agents using this skill.

Response:

{
"agents": [
{
"id": "assignment-uuid",
"agentId": "agent-123",
"agentName": "DevOps Agent",
"agentStatus": "active",
"enabled": true,
"config": {},
"priority": 1,
"assignedAt": "2026-01-20T09:00:00Z",
"assignedBy": "user-456"
}
]
}

Assign Skill to Agent

POST /api/skills/:id/assign

Assigns a skill to an agent. The skill and agent must belong to the same tenant.

Request Body:

{
"agentId": "agent-123",
"config": { "priority": 1 },
"priority": 1
}
FieldTypeRequiredDescription
agentIdstringYesAgent UUID
configobjectNoPer-assignment configuration
prioritynumberNoPriority (higher = more likely to use). Default: 0

Response (201):

{
"assignment": {
"id": "assignment-uuid",
"tenantId": "tenant-uuid",
"skillId": "skill-uuid",
"agentId": "agent-123",
"skillVersion": "1.0.0",
"listingRef": null,
"enabled": true,
"config": {},
"priority": 1,
"assignedAt": "2026-02-14T12:00:00Z",
"assignedBy": "user-456"
}
}

Errors:

StatusBodyCause
400{ "error": "Skill already assigned to this agent" }Duplicate assignment
404{ "error": "Skill not found" }Invalid skill ID
404{ "error": "Agent not found" }Invalid agent ID

Unassign Skill from Agent

DELETE /api/skills/:id/unassign/:agentId

Removes a skill assignment from an agent.

Response:

{
"success": true
}

Update Assignment

PATCH /api/skills/:id/assignments/:agentId

Update assignment configuration (enable/disable, change priority, modify config).

Request Body:

{
"enabled": false,
"config": { "customSetting": "value" },
"priority": 2
}

All fields are optional. Only provided fields are updated.

FieldTypeDescription
enabledbooleanToggle skill on/off without removing
configobjectPer-assignment configuration
prioritynumberAssignment priority

Response:

{
"success": true
}

Get Agent's Skills

GET /api/skills/agent/:agentId

Returns all skills assigned to a specific agent.

Response:

{
"skills": [
{
"assignmentId": "assignment-uuid",
"skillId": "skill-uuid",
"name": "terraform",
"slug": "terraform",
"description": "Expert Terraform/OpenTofu...",
"category": "engineering",
"listingRef": null,
"enabled": true,
"config": {},
"priority": 1,
"assignedAt": "2026-01-20T09:00:00Z"
}
]
}

MCP Tool: skill_query

Agents use this MCP tool to load skill content during conversations.

Tool Definition:

{
"name": "skill_query",
"description": "Load instructions from an assigned skill. Use when you need domain expertise.",
"parameters": {
"skillId": {
"type": "string",
"description": "Skill ID to query (from available skills list)"
},
"query": {
"type": "string",
"description": "The question or topic"
},
"context": {
"type": "string",
"description": "Additional context to improve relevance"
},
"referenceFile": {
"type": "string",
"description": "Specific reference file to load (e.g., 'ESCALATION-MATRIX.md')"
}
}
}

Response:

{
"skill": {
"id": "ticket-triage",
"name": "ticket-triage",
"description": "ITIL-based ticket triage...",
"category": "support"
},
"instructions": "# Support Ticket Triage\n\n## Decision Tree\n...",
"references": [
{
"filename": "ESCALATION-MATRIX.md",
"content": "# Escalation Matrix\n\n..."
}
],
"availableReferences": [
"ESCALATION-MATRIX.md",
"SLA-DEFINITIONS.md",
"CATEGORY-ROUTING.md"
],
"availableScripts": [
"classify-ticket.py"
]
}

MCP Tool: skill_discover

Browse the full skill catalog. Unlike skill_query (which only works with assigned skills), this tool shows all available skills.

Tool Definition:

{
"name": "skill_discover",
"description": "Browse the full skill catalog to find skills you don't have yet.",
"parameters": {
"category": {
"type": "string",
"description": "Filter by category (sales, engineering, etc.)"
},
"query": {
"type": "string",
"description": "Keyword search across skill names and descriptions"
}
}
}

Response:

{
"skills": [
{
"id": "coding-agent",
"name": "coding-agent",
"description": "Full-stack software development capabilities...",
"category": "engineering",
"version": "1.0.0",
"author": "meetloyd",
"assignedToMe": false
}
],
"total": 42
}

Returns metadata only — no instructions. Each skill includes assignedToMe to indicate current assignment status.


MCP Tool: skill_request

Request assignment of a skill. Creates a human-in-the-loop task for admin approval.

Tool Definition:

{
"name": "skill_request",
"description": "Request assignment of a skill from the catalog.",
"parameters": {
"skillId": {
"type": "string",
"description": "The skill ID to request",
"required": true
},
"reason": {
"type": "string",
"description": "Why you need this skill",
"required": true
}
}
}

Response:

{
"taskId": "task_abc123",
"status": "pending",
"message": "Skill assignment request created. An administrator will review and approve."
}

MCP Tool: connector_discover

Discover connected and available integrations, with skill recommendations per connector.

Tool Definition:

{
"name": "connector_discover",
"description": "Discover available and connected integrations.",
"parameters": {
"category": {
"type": "string",
"description": "Filter by category (productivity, crm, developer, etc.)"
}
}
}

Response:

{
"connected": [
{ "id": "github", "name": "GitHub", "category": "developer" }
],
"available": [
{ "id": "slack", "name": "Slack", "category": "communication" }
],
"suggestedSkills": [
{ "integrationId": "github", "suggestedSkills": ["coding-agent", "webapp-testing"] }
]
}

MCP Tool: connector_request

Request setup of a missing integration. Creates a task for an admin.

Tool Definition:

{
"name": "connector_request",
"description": "Request setup of a missing integration.",
"parameters": {
"integrationId": {
"type": "string",
"description": "The integration slug (e.g., 'github', 'slack')",
"required": true
},
"reason": {
"type": "string",
"description": "Why you need this integration",
"required": true
}
}
}

Response:

{
"taskId": "task_xyz789",
"status": "pending",
"message": "Integration setup request created for GitHub. An administrator will review."
}

Error Codes

StatusDescription
200Success
201Created (assignment)
400Bad request (validation error, duplicate assignment)
401Unauthorized (missing or invalid token)
403Forbidden (insufficient permissions)
404Not found (skill or agent doesn't exist in tenant)
422Unprocessable entity (schema validation failed)

See also: Skills Overview | Skill Discovery | Coding Agent | Creating Skills | Skills Architecture