HarborHarbor
DocumentationGuidesPlugins
Concepts

Plugins

Connected services Harbor knows how to inspect and execute.

A plugin is a connected service Harbor knows how to talk to. Inside a workspace, an installed plugin is usually called a source. Runtime code calls tools through the source namespace returned by inspect.

Source fields

  • Namespace: the runtime binding used from hrbr exec or Functions.
  • Kind: MCP, API, CLI, or GraphQL.
  • State: ready, requires OAuth, needs credentials, no tools, or not installed.
  • Tools: discovered callable operations with input/output schemas and examples.

Source states

StateMeaningCorrect next step
readyAuth complete, tools indexedExecute tools from runtime code.
requires_oauthOAuth not completedStart OAuth from dashboard or hrbr.sources.oauthStart.
needs_credentialsRequired secret missingAdd credentials through dashboard or SDK/admin flows.
no_toolsAuth completed but no tools indexedRefresh or inspect in dashboard.
not_installedCatalog entry not installedInstall from dashboard or SDK/admin flows.
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" })'

The public CLI does not expose a separate plugin subcommand family. Plugin lifecycle is dashboard or SDK/admin flow; CLI discovery goes through hrbr inspect.

Tool discovery

hrbr inspect 'return await hrbr.tools.search({ query: "create a linear issue", limit: 5 })'

Use the returned js_var, js_name, callable example, and type details when writing hrbr exec code.

hrbr exec 'return await linearMcp.listIssues({ limit: 3 })'

Credentials never leave Harbor. Runtime code sees tool outputs, not OAuth tokens or API keys.