Enrichers
Enrichers dynamically modify MCP tool schemas and transform arguments at runtime. They implement the ToolEnricher trait from devboy-core.
How It Works
ToolEnricher Trait
Built-in Enrichers
Static Enrichers (no metadata needed)
GitLabSchemaEnricher — removes params not supported by GitLab:
- Removes:
priority,parentId,customFields,issueType,components,projectId,points - Adds:
link_typeenum["relates_to", "blocks", "is_blocked_by"]
GitHubSchemaEnricher — removes params not supported by GitHub:
- Same removals as GitLab
link_issuestool marked as unsupportedtransform_args: mapsline_type→ GitHubsideparameter (old→LEFT, new→RIGHT)
Dynamic Enrichers (require metadata)
ClickUpSchemaEnricher — adapts tools using list metadata:
- Adds
statusenum from list statuses - Adds
priorityenum["urgent", "high", "normal", "low"] - Replaces
customFieldswith individualcf_*params from custom field definitions transform_args: mapscf_*back to ClickUp format (dropdown name→orderindex, labels name→id)transform_args: maps priority name→numeric (urgent→1, high→2, normal→3, low→4)
JiraSchemaEnricher — adapts tools using project metadata:
- Adds
issueTypeenum from project issue types (excludes subtask types) - Adds
priorityenum from project priorities with alias hints - Adds
componentsenum from project components - Single project: removes
projectId, replacescustomFieldswithcf_* - Multi-project:
projectIdbecomes enum of project keys, keeps genericcustomFields transform_args: maps priority aliases (urgent→Highest, high→High, etc.)transform_args: mapscf_*to Jira format (option name→{id}, array names→[{id}])
Pipeline Enrichers
PipelineFormatEnricher — adds format parameter to list tools:
- Adds
formatenum["markdown", "compact", "json"]to read tools - Default:
markdown
Custom Fields
ClickUp and Jira support custom fields with different value transformation semantics:
ClickUp Field Types
Jira Field Types
Creating a Custom Enricher
Register with the executor: