HarborHarbor
DocumentationGuidesPlugins
Authoring

Skills — Wiring tool calls

Bind the workflow steps to exact plugin tools, with argument templating.

The harbor_workflow.tools and harbor_workflow.steps sections are where most authoring errors live. This page lists every field and the common mistakes.

tools[]

Each tool the workflow uses must be declared once.

harbor_workflow:
  schema_version: 1
  tools:
    - id:           sentry.get_issue
      source_slug:  sentry-mcp
      namespace:    sentryMcp
      tool:         getIssue
    - id:           linear.create_issue
      source_slug:  linear-mcp
      namespace:    linearMcp
      tool:         createIssue
FieldWhat it doesLooks up against
idLocal id used in tool_calls[].tool_ref(free; you pick)
source_slugCatalog slugDashboard catalog or hrbr.sources.list output
namespaceWorkspace bindingplugins[].namespace in the registry
toolTool name on that sourcehrbr.tools.search output

The validator checks every source_slug, namespace, and tool against your workspace's installed sources.

steps[]

  steps:
    - id: fetch
      tool_calls:
        - tool_ref: sentry.get_issue
          arguments:
            id: "{{ input.issueId }}"

    - id: file
      tool_calls:
        - tool_ref: linear.create_issue
          arguments:
            teamId:      "ENG"
            title:       "{{ steps.fetch.title }}"
            description: "Sentry: {{ steps.fetch.url }}"
FieldWhat it does
idUnique step id used in arguments interpolation
tool_calls[]List of tool invocations in this step (typically 1)
tool_calls[].tool_refReferences a tools[].id declared above
tool_calls[].argumentsObject passed to the tool. Supports {{ ... }} templating

Argument templating

Inside arguments, {{ ... }} references:

ExpressionValue
{{ input.X }}The input the skill was invoked with
{{ steps.<step-id>.Y }}The output of an earlier step
{{ workspace.<key> }}Workspace metadata (e.g. workspace slug)
{{ user.<key> }}Calling user metadata (when present)

Templating is JSON-aware: {{ steps.fetch.title }} is interpolated as a string; {{ steps.fetch }} is interpolated as an object.

Common mistakes

SymptomLikely cause
unknown source_slug: sentry-mcp on validateThe plugin isn't installed (or is requires_oauth). Install + connect first.
tool sentry.get_issue does not exist on sentry-mcpTool was renamed or removed upstream. Re-run hrbr.tools.search and copy the current call shape.
argument id missing required fieldThe tool's input schema requires a field you did not provide. Re-run hrbr.tools.search and copy the returned example/type details.
cannot interpolate steps.foo.bar — step foo has no output barThe step's output shape doesn't have bar. Check the tool's output schema.

Where to go next