paperclipai/paperclip · error · ToolGatewayHttpError
plugin_tools_disabled
plugin_tools_disabled
Error message
Plugin tool dispatch is not enabled
What it means
executePluginTool guard: the service was constructed without a pluginToolDispatcher, so the plugin tool subsystem is not wired into this deployment. The 501 plugin_tools_disabled signals the capability is intentionally absent (feature flag/build config), not a transient failure; do not retry, enable plugin dispatch instead.
Solutions
- Enable plugin tool dispatch (plugins feature) for this instance/session before calling plugin-provided tools.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/services/tool-gateway.ts:6025 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-09-18).
Data as JSON: /api/errors/45aebabd87225fe9.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/services/tool-gateway.ts:10517
durationMs: Date.now() - startedAt,
error: message,
...(executionAuditFromError(normalizedError)
? { execution: executionAuditFromError(normalizedError) }
: {}),
},
});
if (normalizedError instanceof ToolContentValidationError) {
throw new ToolGatewayHttpError(422, message, reasonCode, {
findings: normalizedError.findings,
});
}
throw normalizedError;
}
},
async executePluginTool(input: ExecutePluginToolInput) {
if (!pluginToolDispatcher) {
throw new ToolGatewayHttpError(
501,
"Plugin tool dispatch is not enabled",
"plugin_tools_disabled",
);
}
if (input.actor.type === "agent") {
if (input.actor.companyId !== input.runContext.companyId) {
throw new ToolGatewayHttpError(
403,
"Agent key cannot access another company",
"actor_company_mismatch",
);
}
if (input.actor.agentId !== input.runContext.agentId) {
throw new ToolGatewayHttpError(
403,
"Agent cannot execute tools as another agent",
"actor_agent_mismatch",View on GitHub (pinned to 3f1d897a7c)