Skip to main content

Custom Packs Management API

Build custom tool collections by combining MCP servers into reusable packs.

Overview

Custom Packs let you:
  • Combine servers - Group multiple MCP servers together
  • Share collections - Use the same pack across projects
  • Organize tools - Logical grouping for team workflows
  • Enforce limits - Control max packs per plan
  • Version control - Track and update pack configurations

What Are Packs?

A Pack is a curated collection of MCP servers that work together:
{
  "id": "pack_dev_workflow",
  "name": "Development Workflow",
  "description": "Git, CI/CD, and deployment tools",
  "servers": ["github-mcp", "gitlab-mcp", "jenkins-mcp"],
  "created_at": 1705315800,
  "updated_at": 1705315800
}

Plan Limits

PlanMax PacksMax Servers/PackCustom Servers
Free15No
Pro1050Yes
EnterpriseUnlimitedUnlimitedYes

POST /custom-packs/mcp-servers

Create a custom MCP server definition

Authentication

Required

Request Body

FieldTypeRequiredDescription
namestringYesServer name
display_namestringYesDisplay name
descriptionstringYesServer description
urlstringNoServer documentation URL
iconstringNoIcon name/URL
categorystringNoCategory (custom, development, etc.)
configobjectNoCustom configuration

Request Example

curl -X POST "https://api.agent-corex.com/custom-packs/mcp-servers" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-internal-api",
    "display_name": "Internal API Tools",
    "description": "Tools for our internal REST API",
    "url": "https://api.internal.com",
    "icon": "api",
    "category": "custom",
    "config": {
      "base_url": "https://api.internal.com",
      "auth_type": "bearer",
      "auth_header": "X-API-Key"
    }
  }'

Response Format

{
  "id": "server_custom_123",
  "name": "my-internal-api",
  "display_name": "Internal API Tools",
  "description": "Tools for our internal REST API",
  "created_at": 1705315800,
  "url": "https://api.internal.com",
  "icon": "api",
  "category": "custom"
}

Error Cases

Plan limit exceeded (400):
{
  "error": {
    "code": "PLAN_LIMIT_EXCEEDED",
    "message": "Free plan limited to 1 custom server",
    "details": {
      "plan": "free",
      "limit": 1,
      "current_count": 1,
      "upgrade_to": "pro"
    }
  }
}

GET /custom-packs/mcp-servers

List all custom servers for user

Authentication

Required

Request Example

curl "https://api.agent-corex.com/custom-packs/mcp-servers" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Format

{
  "servers": [
    {
      "id": "server_custom_123",
      "name": "my-internal-api",
      "display_name": "Internal API Tools",
      "description": "Tools for our internal REST API",
      "created_at": 1705315800,
      "updated_at": 1705315800,
      "used_in_packs": 2
    },
    {
      "id": "server_custom_456",
      "name": "legacy-system",
      "display_name": "Legacy System API",
      "description": "Integration with legacy ERP system",
      "created_at": 1705314000,
      "used_in_packs": 1
    }
  ],
  "total": 2
}

POST /custom-packs/packs

Create a custom pack

Authentication

Required

Request Body

FieldTypeRequiredDescription
namestringYesPack name
descriptionstringYesPack description
serversarrayNoList of server IDs/names

Request Example

curl -X POST "https://api.agent-corex.com/custom-packs/packs" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Backend Development",
    "description": "Tools for backend API development",
    "servers": ["github-mcp", "my-internal-api", "postgresql-mcp"]
  }'

Response Format

{
  "id": "pack_dev_123",
  "name": "Backend Development",
  "description": "Tools for backend API development",
  "servers": [
    {
      "id": "github-mcp",
      "name": "github-mcp",
      "display_name": "GitHub",
      "tools_count": 12
    },
    {
      "id": "server_custom_123",
      "name": "my-internal-api",
      "display_name": "Internal API Tools",
      "tools_count": 8
    },
    {
      "id": "postgresql-mcp",
      "name": "postgresql-mcp",
      "display_name": "PostgreSQL",
      "tools_count": 15
    }
  ],
  "total_tools": 35,
  "created_at": 1705315800,
  "updated_at": 1705315800
}

GET /custom-packs/packs

List all custom packs

Authentication

Required

Query Parameters

ParameterTypeDefault
limitinteger20
offsetinteger0

Request Example

curl "https://api.agent-corex.com/custom-packs/packs" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Format

{
  "packs": [
    {
      "id": "pack_dev_123",
      "name": "Backend Development",
      "description": "Tools for backend API development",
      "servers_count": 3,
      "total_tools": 35,
      "enabled": true,
      "created_at": 1705315800,
      "updated_at": 1705315800
    },
    {
      "id": "pack_devops_456",
      "name": "DevOps Toolkit",
      "description": "Infrastructure and deployment tools",
      "servers_count": 5,
      "total_tools": 48,
      "enabled": false,
      "created_at": 1705300000,
      "updated_at": 1705310000
    }
  ],
  "pagination": {
    "limit": 20,
    "offset": 0,
    "total": 2
  }
}

GET /custom-packs/packs/

Get specific pack details

Authentication

Required

Path Parameters

ParameterTypeRequired
pack_idstringYes

Request Example

curl "https://api.agent-corex.com/custom-packs/packs/pack_dev_123" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Format

{
  "id": "pack_dev_123",
  "name": "Backend Development",
  "description": "Tools for backend API development",
  "servers": [
    {
      "id": "github-mcp",
      "name": "github-mcp",
      "display_name": "GitHub",
      "description": "Git version control and GitHub operations",
      "tools": [
        {
          "name": "create_pull_request",
          "description": "Create a new pull request"
        },
        {
          "name": "create_issue",
          "description": "Create a new GitHub issue"
        }
      ],
      "tools_count": 12
    }
  ],
  "total_servers": 3,
  "total_tools": 35,
  "enabled": true,
  "created_at": 1705315800,
  "updated_at": 1705315800
}

PATCH /custom-packs/packs/

Update pack details

Authentication

Required

Request Body

FieldTypeDescription
namestringNew pack name
descriptionstringNew description

Request Example

curl -X PATCH "https://api.agent-corex.com/custom-packs/packs/pack_dev_123" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Backend Development & DevOps",
    "description": "Tools for full backend development lifecycle"
  }'

Response Format

{
  "id": "pack_dev_123",
  "name": "Backend Development & DevOps",
  "description": "Tools for full backend development lifecycle",
  "updated_at": 1705315900
}

DELETE /custom-packs/packs/

Delete a pack

Authentication

Required

Request Example

curl -X DELETE "https://api.agent-corex.com/custom-packs/packs/pack_dev_123" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Format

{
  "id": "pack_dev_123",
  "status": "deleted",
  "message": "Pack deleted successfully"
}

POST /custom-packs/packs//servers

Add server to pack

Authentication

Required

Request Body

FieldTypeRequired
serverstringYes

Request Example

curl -X POST "https://api.agent-corex.com/custom-packs/packs/pack_dev_123/servers" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "server": "redis-mcp"
  }'

Response Format

{
  "pack_id": "pack_dev_123",
  "server": "redis-mcp",
  "status": "added",
  "total_servers": 4
}

DELETE /custom-packs/packs//servers/

Remove server from pack

Authentication

Required

Path Parameters

ParameterTypeRequired
pack_idstringYes
server_namestringYes

Request Example

curl -X DELETE "https://api.agent-corex.com/custom-packs/packs/pack_dev_123/servers/redis-mcp" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Format

{
  "pack_id": "pack_dev_123",
  "server": "redis-mcp",
  "status": "removed",
  "total_servers": 3
}

PUT /custom-packs/packs//servers

Replace all servers in pack

Authentication

Required

Request Body

FieldTypeRequired
serversarrayYes

Request Example

curl -X PUT "https://api.agent-corex.com/custom-packs/packs/pack_dev_123/servers" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "servers": ["github-mcp", "postgresql-mcp", "redis-mcp"]
  }'

Response Format

{
  "pack_id": "pack_dev_123",
  "servers": ["github-mcp", "postgresql-mcp", "redis-mcp"],
  "total_servers": 3
}

GET /custom-packs/packs//install

Get install command for pack

Authentication

Required

Request Example

curl "https://api.agent-corex.com/custom-packs/packs/pack_dev_123/install" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Format

{
  "pack_id": "pack_dev_123",
  "command": "agent-corex pack install pack_dev_123",
  "install_steps": [
    "Install required servers",
    "Download configurations",
    "Enable tools"
  ]
}

Use Cases

Use Case 1: Team Workflow Pack

Goal: Create a pack for frontend development team
# Step 1: Create custom server for design system
curl -X POST "https://api.agent-corex.com/custom-packs/mcp-servers" \
  -d '{
    "name": "design-system-api",
    "display_name": "Design System API",
    "description": "Internal design system component tools"
  }'

# Step 2: Create pack combining design tools with GitHub
curl -X POST "https://api.agent-corex.com/custom-packs/packs" \
  -d '{
    "name": "Frontend Development",
    "description": "Design, git, and deployment tools",
    "servers": ["design-system-api", "github-mcp", "vercel-mcp"]
  }'

# Step 3: Enable it
curl -X POST "https://api.agent-corex.com/packs/enable" \
  -d '{"pack_id": "pack_frontend_123"}'

Use Case 2: Multi-Service API Pack

Goal: Manage multiple internal services
# Create servers for each service
for service in auth payments notifications; do
  curl -X POST "https://api.agent-corex.com/custom-packs/mcp-servers" \
    -d "{
      \"name\": \"$service-service\",
      \"display_name\": \"$service Service API\"
    }"
done

# Create pack combining all
curl -X POST "https://api.agent-corex.com/custom-packs/packs" \
  -d '{
    "name": "Microservices",
    "servers": ["auth-service", "payments-service", "notifications-service"]
  }'

Best Practices

1. Logical Grouping

// ✅ Good - Related servers together
const workflowPack = {
  name: "CI/CD Pipeline",
  servers: ["github-mcp", "jenkins-mcp", "slack-mcp"]
};

// ❌ Bad - Random collection
const randomPack = {
  name: "Everything",
  servers: ["github", "aws", "slack", "postgresql"]
};

2. Naming Convention

// ✅ Good - Clear, descriptive names
{
  name: "Backend-Development",
  servers: ["github-mcp", "postgresql-mcp", "redis-mcp"]
}

{
  name: "DevOps-Infrastructure",
  servers: ["aws-mcp", "terraform-mcp", "kubernetes-mcp"]
}

// ❌ Bad - Ambiguous names
{
  name: "Pack1",
  servers: ["mcp-1", "mcp-2", "mcp-3"]
}

3. Version Server Configurations

// Track server versions in custom servers
{
  name: "internal-api-v2",
  display_name: "Internal API (v2.1.3)",
  description: "Production version of internal API",
  config: {
    version: "2.1.3",
    deployment: "production",
    documentation: "https://api.internal.com/docs"
  }
}

4. Document Pack Usage

// Add detailed descriptions
{
  name: "Data-Pipeline",
  description: `
    Tools for ETL and data processing:
    - Extract: kafka-mcp, s3-mcp
    - Transform: spark-mcp, dbt-mcp
    - Load: postgresql-mcp, snowflake-mcp
    
    Used by: Data Engineering team
    On-call: @data-eng-oncall
  `
}

Management Workflow

Create and Configure

async function setupPack(packConfig) {
  // 1. Create custom servers if needed
  const servers = [];
  for (const srv of packConfig.custom_servers) {
    const created = await createServer(srv);
    servers.push(created.id);
  }
  
  // 2. Create pack
  const pack = await createPack({
    name: packConfig.name,
    description: packConfig.description,
    servers: servers.concat(packConfig.standard_servers)
  });
  
  // 3. Enable pack
  await enablePack({ pack_id: pack.id });
  
  return pack;
}

Update and Migrate

async function migratePackServers(packId, oldServer, newServer) {
  // Remove old
  await removeServerFromPack(packId, oldServer);
  
  // Add new
  await addServerToPack(packId, newServer);
  
  // Get updated pack
  return await getPack(packId);
}

Archive and Cleanup

async function archivePack(packId) {
  // Get all servers
  const pack = await getPack(packId);
  const serverIds = pack.servers.map(s => s.id);
  
  // Disable each server
  for (const serverId of serverIds) {
    await toggleServer(serverId, false);
  }
  
  // Delete pack
  await deletePack(packId);
  
  console.log(`Pack ${packId} archived`);
}

Error Handling

Plan Limit Exceeded

async function safeCreatePack(packConfig) {
  try {
    return await createPack(packConfig);
  } catch (error) {
    if (error.code === 'PLAN_LIMIT_EXCEEDED') {
      console.error('Plan limit reached');
      console.error('Current:', error.details.current_count);
      console.error('Limit:', error.details.limit);
      console.log('Upgrade to:', error.details.upgrade_to);
      throw error;
    }
    throw error;
  }
}

Server Not Found

async function addServerSafe(packId, serverName) {
  try {
    return await addServerToPack(packId, serverName);
  } catch (error) {
    if (error.code === 'SERVER_NOT_FOUND') {
      // List available servers
      const servers = await listAvailableServers();
      console.error(`Server "${serverName}" not found`);
      console.log('Available servers:', servers.map(s => s.name));
    }
    throw error;
  }
}

Integration with Tools

Once pack is enabled, use tools:
# Tools from enabled pack are discoverable
curl "https://api.agent-corex.com/retrieve_tools?query=create+github+issue" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Response includes tools from all servers in enabled packs
{
  "tools": [
    {
      "name": "create_issue",
      "server": "github-mcp",
      "description": "Create GitHub issue"
    }
  ]
}

See Also