Plugins
Connected services Harbor can inspect and execute through real CLI and SDK surfaces.
A plugin is a connected service Harbor knows how to talk to: Linear, GitHub, Sentry, Slack, Notion, Postgres, Stripe, Cloudflare, your own MCP server, and many others. In the runtime and API this installed workspace connection is usually called a source.
Browse the catalog
Filter by MCP, API, CLI, and GraphQL connectors.
Install your first plugin
Connect a plugin, complete OAuth, inspect tools, and execute a call.
Custom MCP plugin
Register an MCP server you control.
Concept reference
Source states, namespaces, tools, and credentials.
Real CLI surface
The public CLI does not have separate plugin or tool subcommands. Use the dashboard for guided install/connect flows, and use hrbr inspect for source readiness and tool discovery.
hrbr inspect 'return await hrbr.sources.list()'
hrbr inspect 'return await hrbr.sources.search({ query: "linear" })'
hrbr inspect 'return await hrbr.sources.oauthStart({ namespace: "linear-mcp" })'
hrbr inspect 'return await hrbr.tools.search({ query: "file a linear issue", limit: 5 })'Use hrbr exec only after discovery, when you know the exact runtime namespace and tool call shape.
hrbr exec 'return await linearMcp.listIssues({ limit: 3 })'Plugin kinds
| Kind | What it is | Examples |
|---|---|---|
| MCP | Model Context Protocol server | Linear, Notion, Sentry, Stripe, Slack |
| API | Direct REST integration | Resend, Twilio, Open-Meteo, GitHub REST |
| CLI | Local CLI bridged through Sand when available | git, gh, wrangler, aws, modal |
| GraphQL | GraphQL endpoint adapter | Linear GraphQL, GitHub GraphQL |
Source states
| State | Meaning | Next step |
|---|---|---|
| ready | Auth complete, tools indexed | Execute tools from hrbr exec, Functions, Apps, or SDK clients. |
| requires_oauth | OAuth not completed | Start OAuth from dashboard or hrbr.sources.oauthStart. |
| needs_credentials | Required secret missing | Add credentials in the dashboard or through SDK/admin flows. |
| no_tools | Auth completed but no tools indexed | Refresh or inspect the source in the dashboard. |
| not_installed | Catalog entry is not installed | Install from the dashboard or SDK/admin flows. |
Only ready sources are callable from runtime code. If inspect reports setup state, treat it as configuration work, not as a runtime failure.
Tools
A tool is a discoverable function exposed by a source. Search before invoking so your code uses the returned js_var, js_name, callable example, and type details.
hrbr inspect 'return await hrbr.tools.search({ query: "create a linear issue", limit: 5 })'Tool budgets are precious. Load the smallest shape you need, then execute the exact call.