Add An Integration
Choose the integration style that matches the upstream.
Inline Declarative YAML
Use this when the surface is small and custom.
integrations:
support:
display_name: Support
plugin:
auth:
type: bearer
credentials:
- name: token
label: API Token
base_url: https://api.support.example.com
operations:
- name: list_tickets
method: GET
path: /ticketsInline OpenAPI
Use this when the upstream already publishes a spec.
Assume you already have a local OpenAPI file such as ./openapi/httpbin.yaml.
providers:
httpbin:
display_name: HTTPBin
mcp:
enabled: true
tool_prefix: httpbin_
connections:
public:
mode: none
auth:
type: none
surfaces:
openapi:
document: ./openapi/httpbin.yaml
connection: public
allowed_operations:
get_ip:
alias: get_ip
get_headers:
alias: get_headersPackaged Plugin
Use this when the logic belongs in code or should be versioned independently.
providers:
support:
display_name: Support
from:
package: ./dist/support-plugin.tar.gzPrepare it and start from locked state:
gestaltd init --config ./config.yaml
gestaltd serve --locked --config ./config.yamlHybrid Provider
Use this when you want packaged custom logic plus spec-backed operations.
Assume you already have a local package such as ./dist/support-plugin.tar.gz
and a local OpenAPI file such as ./openapi/support.yaml.
providers:
support:
display_name: Support
mcp:
enabled: true
tool_prefix: support_
from:
package: ./dist/support-plugin.tar.gz
surfaces:
openapi:
document: ./openapi/support.yaml
connection: default
mcp:
url: https://mcp.support.example.com/mcp
connection: default
allowed_operations:
tickets.list:
alias: list_ticketsNamed Connections
Use named connections when different surfaces need different auth flows.
integrations:
workspace:
plugin:
openapi: ./openapi/workspace.yaml
mcp_url: https://mcp.example.com/mcp
openapi_connection: api
mcp_connection: mcp
default_connection: api
connections:
api:
mode: user
auth:
type: oauth2
authorization_url: https://accounts.example.com/oauth/authorize
token_url: https://accounts.example.com/oauth/token
client_id: ${CLIENT_ID}
client_secret: ${CLIENT_SECRET}
mcp:
mode: user
auth:
type: mcp_oauthValidate The Result
gestaltd validate --init --config ./config.yamlThat catches:
- invalid YAML
- undeclared named connections
- invalid manifest references
- stale packaged plugin state