list_providers
List workspace-scoped provider instances and their limits, status, and slugs. Use this to find provider slugs for workspace-level updates.
Instructions
List workspace-scoped provider instances and their limits or status. Use this to find provider slugs for workspace-level updates; use list_integrations for the org-level source connection. Returns total plus provider name, slug, integration, status, limits, expiration, and reset flags.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| current_page | No | Page number for pagination | |
| page_size | No | Number of results per page (max 100, default 50) | |
| workspace_id | No | Workspace ID - required when using organization admin keys, optional with workspace API keys |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ok | Yes | Whether the tool call succeeded and returned structured data | |
| data | No | Structured success payload when ok is true | |
| error | No | Structured error payload when ok is false |
Implementation Reference
- src/tools/providers.tools.ts:166-215 (handler)The MCP tool handler for 'list_providers'. It calls service.providers.listProviders(), then maps the response to a JSON text result containing total, provider name, slug, integration_id, status, note, usage_limits, rate_limits, reset_usage, expires_at, and created_at.
server.tool( "list_providers", "List workspace-scoped provider instances and their limits or status. Use this to find provider slugs for workspace-level updates; use list_integrations for the org-level source connection. Returns total plus provider name, slug, integration, status, limits, expiration, and reset flags.", PROVIDERS_TOOL_SCHEMAS.listProviders, async (params) => { const providers = await service.providers.listProviders({ current_page: params.current_page, page_size: params.page_size, workspace_id: params.workspace_id, }); return { content: [ { type: "text", text: JSON.stringify( { total: providers.total, providers: providers.data.map((provider) => ({ name: provider.name, slug: provider.slug, integration_id: provider.integration_id, status: provider.status, note: provider.note, usage_limits: provider.usage_limits ? { credit_limit: provider.usage_limits.credit_limit, alert_threshold: provider.usage_limits.alert_threshold, periodic_reset: provider.usage_limits.periodic_reset, } : null, rate_limits: provider.rate_limits?.map((limit) => ({ type: limit.type, unit: limit.unit, value: limit.value, })) ?? null, reset_usage: provider.reset_usage, expires_at: provider.expires_at, created_at: provider.created_at, })), }, null, 2, ), }, ], }; }, ); - src/tools/providers.tools.ts:7-26 (schema)Zod input schema for list_providers: optional current_page (positive number), page_size (int, 1-100), and workspace_id (string).
listProviders: { current_page: z.coerce .number() .positive() .optional() .describe("Page number for pagination"), page_size: z.coerce .number() .int() .positive() .max(100) .optional() .describe("Number of results per page (max 100, default 50)"), workspace_id: z .string() .optional() .describe( "Workspace ID - required when using organization admin keys, optional with workspace API keys", ), }, - Service method 'listProviders' that sends a GET request to '/providers' with optional params (current_page, page_size, workspace_id), returning a ListProvidersResponse.
export class ProvidersService extends BaseService { async listProviders( params?: ListProvidersParams, ): Promise<ListProvidersResponse> { return this.get<ListProvidersResponse>("/providers", params); - Type definitions for ListProvidersResponse (object, total, data: Provider[]) and ListProvidersParams (current_page?, page_size?, workspace_id?).
export interface ListProvidersResponse { object: "list"; total: number; data: Provider[]; } export interface ListProvidersParams { current_page?: number; page_size?: number; workspace_id?: string; } - src/tools/index.ts:30-49 (registration)The 'providers' domain is registered in TOOL_DOMAIN_REGISTRARS at line 45, mapping to registerProvidersTools, which is called by registerAllTools to wire up the list_providers tool on the MCP server.
const TOOL_DOMAIN_REGISTRARS = [ ["users", registerUsersTools], ["workspaces", registerWorkspacesTools], ["configs", registerConfigsTools], ["keys", registerKeysTools], ["collections", registerCollectionsTools], ["prompts", registerPromptsTools], ["analytics", registerAnalyticsTools], ["guardrails", registerGuardrailsTools], ["limits", registerLimitsTools], ["audit", registerAuditTools], ["labels", registerLabelsTools], ["partials", registerPartialsTools], ["tracing", registerTracingTools], ["logging", registerLoggingTools], ["providers", registerProvidersTools], ["integrations", registerIntegrationsTools], ["mcp-integrations", registerMcpIntegrationsTools], ["mcp-servers", registerMcpServersTools], ] as const satisfies readonly (readonly [string, ToolRegistrar])[];