Skip to content

Connector spec ​

A connector is a single JSON file. This page documents the full schema.

Top-level shape ​

json
{
  "name": "Pet Store API",
  "slug": "petstore",
  "version": "1.0.0",
  "sources": [ /* ... */ ],
  "tools":   [ /* ... */ ],
  "skills":  [ /* ... */ ]
}
FieldRequiredDescription
nameyesHuman-readable display name
slugyesStable identifier (a-z0-9-) used in URLs and audit logs
versionyesSemVer — bump when the contract changes
sourcesyesOne or more data sources (see below)
toolsyesOne or more agent-callable tools
skillsnoPrompt templates that orchestrate tools

Sources ​

REST ​

json
{
  "id": "animals",
  "type": "rest",
  "url": "https://api.example.com/animals",
  "data_path": "items",
  "auth": {
    "type": "api_key",
    "secret_key": "PETSTORE_API_KEY",
    "header_name": "X-Api-Key"
  }
}

data_path is a JMESPath expression that extracts the array of records from the response envelope.

PostgreSQL / MySQL ​

json
{
  "id": "orders",
  "type": "postgres",
  "dsn": "{{ env:ORDERS_DATABASE_URL }}",
  "table": "orders"
}

CSV / JSON file ​

json
{
  "id": "regions",
  "type": "csv",
  "path": "./data/regions.csv"
}

Auth types ​

TypeRequired fields
none—
api_keysecret_key, header_name
bearersecret_key
basicuser_secret_key, pass_secret_key

Secrets always resolve from process env vars. Never put a key directly in the JSON.

Tools ​

json
{
  "id": "list_animals",
  "name": "List animals",
  "description": "Return all animals, optionally filtered by species. Returns up to 100 rows.",
  "category": "READ",
  "sql": "SELECT * FROM animals WHERE (:species IS NULL OR species = :species) LIMIT 100",
  "parameters": [
    {
      "name": "species",
      "type": "string",
      "description": "Filter by species (optional)",
      "required": false
    }
  ]
}
FieldRequiredDescription
idyessnake_case, stable
nameyesDisplay name
descriptionyesVerb-first. The linter rejects vague descriptions.
categoryyesREAD, WRITE, or ACTION
sqlyesParameterised — bind with :name, never +
parametersyesTyped parameter list (may be empty)

Parameter types: string, int, float, bool, date, datetime.

Skills ​

json
{
  "id": "animal_report",
  "name": "Animal population report",
  "description": "Summarise all animals grouped by species.",
  "tool_ids": ["list_animals"],
  "prompt_template": "Using the results of list_animals, group by species and return counts."
}

Skills are surfaced through MCP prompts/list — agents see them alongside tools.

Secrets in env vars ​

Inside any string value in the connector, you can interpolate {{ env:VAR_NAME }}. The runtime substitutes from os.environ at request time. Useful for DSNs, URLs that vary by env, etc.

Hot reload ​

The runtime watches connector files on disk. mtime + 30s TTL means edits show up in agents and Studio within seconds — no service restart needed.

Validation ​

elliot lint my.connector.json runs the full schema check plus the five principles audit on every tool. Run it locally and in CI.

Released under the MIT License. Privacy · Terms