Skip to main content

Overview

A composite skill aggregates capabilities from multiple MCP servers into a single discoverable unit. Instead of querying dozens of individual servers, an AI agent queries one composite that routes to the right businesses based on vertical, location, capabilities, and trust requirements.
Composite skills are computed in real-time — they reflect current health and verification status on every request.

Types of composite skills

Per-business composition

A single business with multiple capabilities exposes them as one unified skill. The listing’s SKILL.md references sub-skills via composed_of:

Cross-business composition (Hub-native)

Hub dynamically generates composites from registry queries — not static files, but computed at query time based on vertical, location, verification level, and capabilities:

Trust rules

A composite skill’s trust level equals the minimum verification tier of its participants (Decision #6). This prevents a single unverified server from hiding inside a trusted composite. Consequences:
  • If a participant’s verification lapses, the composite is automatically recomputed excluding that participant
  • Unhealthy servers (health score < 50) are excluded from composite membership entirely
  • A composite’s avgHealthScore is the average of its current members
Filter composites by minimum trust with ?verification_tier_min=3 — returns only composites where every participant is business-verified or higher.

created_by discriminator

Every composite has a created_by field that indicates its origin and governs its lifecycle:

Agent composites

When an agent creates a composite with created_by=agent:
  • Visibility is always private — the visibility parameter is rejected with HTTP 400
  • expiresAt is set to now() + 30 days
  • Maximum 50 agent composites per account (HTTP 429 with Retry-After: 86400 if exceeded)
  • A daily background job purges expired agent composites

Promotion flow

Account holders can promote an agent-created composite to persistent, public ownership: Auth: Builder+ Hub API key (owning account)
Promotion clears expiresAt (the composite persists indefinitely) and makes it eligible for browse discovery. Response:
Hub auto-generates system composites every 6 hours:
  • For each vertical with ≥ 3 eligible listings in a given city/state
  • Eligibility: verification_tier ≥ 2 and health_score ≥ 50
  • Maximum 500 system composites system-wide
  • Named "{City} {Vertical Title-Case}" (e.g., “Ann Arbor Restaurants”)
  • Stable deterministic IDs — safe to bookmark
  • Always visibility: public

API reference

Dynamic composite query

Query composites in real time without saving a composite definition:
Auth: Explorer+ Hub API key Query parameters: Example request:
Response: A dynamically generated composite document listing all matching businesses, sorted by trust_score × health_score × listing_tier.
Composites are computed fresh on every request — not cached — to reflect real-time health and verification status. Query performance target: <200ms p95.

List your composites

Return all saved composites owned by the authenticated account:
Auth: Explorer+ Hub API key Query parameters: Page limit: The response returns up to 200 composites per call. When the result set is capped at 200, the response includes the X-Truncated: true header indicating that more records exist beyond the returned page. X-Truncated response header: Example request:
Response:
If the response includes X-Truncated: true, your result is incomplete. Use created_by to narrow the filter, or use the browse endpoint with pagination for full traversal of public composites.

Create custom composite

Save a composite definition for reuse:
Auth: Builder+ Hub API key Request body: query_definition fields: Example — user-owned public composite:
Example — agent-created ephemeral composite:
Response:

Update custom composite

Update the name, description, visibility, and/or query_definition of a saved custom composite you own:
Auth: Builder+ Hub API key (owning account) System-generated composites (created_by: system) cannot be updated. Agent-created composites (created_by: agent) cannot be promoted to visibility: public via this endpoint. URL parameters: Request body (at least one field required): Example request:
Response (200):
Error codes:

Delete custom composite

Permanently delete a custom composite you own:
Auth: Builder+ Hub API key (owning account) System-generated composites (created_by: system) cannot be deleted via this endpoint. URL parameters: Example request:
Response: 204 No Content on success (empty body). Error codes:

Browse public composites

List the public composite catalog — system-generated and user-promoted composites:
Auth: Explorer+ Hub API key Query parameters:
Agent-created composites (created_by: agent) are never included in browse results. Only public composites are returned.
Results are ranked: compositeTrust DESCmemberCount DESCavgHealthScore DESC Example request:
Response:

Composite SKILL.md

Every public composite exposes a SKILL.md document for agent discovery:
Auth:
  • Public composites: any Explorer+ key
  • Private composites (including agent-created): owning account only
Response: A generated SKILL.md document with composite-specific hub fields:
This document is regenerated on each request (consistent with Decision #7 — no caching).

Hub MCP server tools

The ezForge Hub MCP server exposes two composite tools for agents that consume Hub natively.

hub_composites

Query composites in real time using the dynamic composite API. Equivalent to GET /v1/hub/composites. Arguments: Auth: Explorer+

hub_browse_composites

Browse the public composite catalog. Equivalent to GET /v1/hub/composites/browse. Agent-created composites are never included. Arguments: Auth: Explorer+ Example response:

Auth requirements summary