Overview
Integrations connect Radarboard to external services (GitHub, Stripe, Sentry, etc.). Each integration lives in its own package underintegrations/ and provides:
- Credential configuration — how users authenticate with the service
- Data sources — API endpoints that widgets can consume
- MCP tools (optional) — actions the AI assistant can perform
- Webhook handler (optional) — inbound event processing
Prerequisites
- Radarboard dev environment set up (Setup Guide)
- Familiarity with TypeScript and REST APIs
Step 1: Scaffold
integrations/my-service/ with all boilerplate, registers it in radarboard.config.ts, and runs pnpm install.
Step 2: Define Credentials
Editsrc/index.ts to configure how users authenticate:
type: "oauth" and add an oauth block:
Step 3: Build the API Client
Editsrc/api/client.ts to wrap the external API:
- Keep the client stateless — receive credentials as arguments, don’t store them
- Throw errors with descriptive messages so they surface in the UI
- Define response types in
src/types.ts
Step 4: Wire Up Data Sources
Editsrc/api/data-sources.ts. Each data source becomes an API route:
paramscontainsprojectSlug,range,timeZone,forceRefreshctx.resolveCredential(key)returns the stored credential fields ornullcacheTtlSecondscontrols how long responses are cached
Step 5: Test
Run the conformance tests (included automatically in the scaffold):Step 6: Fill in Metadata
Back insrc/index.ts, complete the descriptor:
Optional: Add MCP Tools
Editsrc/mcp/mcp-tools.ts to let the AI assistant interact with your service:
Optional: Add Webhooks
Createsrc/events/webhook.ts to handle inbound events:
Module Boundaries
Integrations can only import from:@radarboard/integration-sdk@radarboard/types@radarboard/utils
Reference
- Full type reference:
@radarboard/integration-sdk/types - Real examples:
integrations/github/,integrations/stripe/,integrations/vercel/ - Extension rules:
CONTRIBUTING-EXTENSIONS.md