OSS-first docs

These docs teach the open system first: contracts, generated surfaces, runtimes, governance, and incremental adoption. Studio shows up as the operating layer on top, not as the source of truth.

meeting-recorder.granola

Granola meeting notes and transcripts via Enterprise API or MCP transport.

  • Type: integration (integration)
  • Version: 1.0.0
  • Owners: platform.integrations
  • Tags: meeting-recorder, granola, transcripts
  • field.key.label
    meeting-recorder.granola
    field.version.label
    1.0.0
    field.type.label
    integration (integration)
    field.title.label
    meeting-recorder.granola
    field.description.label

    Granola meeting notes and transcripts via Enterprise API or MCP transport.

  • Type: integration (integration)
  • Version: 1.0.0
  • Owners: platform.integrations
  • Tags: meeting-recorder, granola, transcripts
  • field.tags.label
    meeting-recorder,granola,transcripts
    field.owners.label
    platform.integrations
    field.stability.label

    Granola meeting notes and transcripts via Enterprise API or MCP transport.

    Source Definition

    export const granolaIntegrationSpec = defineIntegration({
    	meta: {
    		key: 'meeting-recorder.granola',
    		version: '1.0.0',
    		category: 'meeting-recorder',
    		title: 'Granola Meeting Notes',
    		description:
    			'Granola meeting notes and transcripts via Enterprise API or MCP transport.',
    		domain: 'productivity',
    		owners: ['platform.integrations'],
    		tags: ['meeting-recorder', 'granola', 'transcripts'],
    		stability: StabilityEnum.Experimental,
    	},
    	supportedModes: ['byok'],
    	transports: [{ type: 'rest' }, { type: 'mcp', transport: 'http' }],
    	preferredTransport: 'mcp',
    	supportedAuthMethods: [{ type: 'api-key' }, { type: 'bearer' }],
    	capabilities: {
    		provides: [
    			{ key: 'meeting-recorder.meetings.read', version: '1.0.0' },
    			{ key: 'meeting-recorder.transcripts.read', version: '1.0.0' },
    		],
    	},
    	configSchema: {
    		schema: {
    			type: 'object',
    			properties: {
    				baseUrl: {
    					type: 'string',
    					description:
    						'Optional override for the Granola API base URL. Defaults to https://public-api.granola.ai for API transport.',
    				},
    				transport: {
    					type: 'string',
    					enum: ['api', 'mcp'],
    					description:
    						'Transport mode for Granola integration. Use api for Enterprise API or mcp for broader MCP access.',
    				},
    				mcpUrl: {
    					type: 'string',
    					description:
    						'Optional override for Granola MCP URL. Defaults to https://mcp.granola.ai/mcp.',
    				},
    				mcpHeaders: {
    					type: 'object',
    					additionalProperties: { type: 'string' },
    					description: 'Optional static headers for MCP gateway/proxy setups.',
    				},
    				pageSize: {
    					type: 'number',
    					description:
    						'Page size for listing notes (maximum 30 per Granola API).',
    				},
    			},
    		},
    		example: {
    			transport: 'mcp',
    			mcpUrl: 'https://mcp.granola.ai/mcp',
    			pageSize: 10,
    		},
    	},
    	secretSchema: {
    		schema: {
    			type: 'object',
    			properties: {
    				apiKey: {
    					type: 'string',
    					description:
    						'Granola API key used as a Bearer token for Enterprise API requests (transport=api).',
    				},
    				mcpAccessToken: {
    					type: 'string',
    					description:
    						'Optional bearer token for MCP proxy/gateway auth (transport=mcp).',
    				},
    			},
    		},
    		example: {
    			mcpAccessToken: 'granola-mcp-***',
    		},
    	},
    	healthCheck: {
    		method: 'list',
    		timeoutMs: 8000,
    	},
    	docsUrl: 'https://docs.granola.ai/help-center/sharing/integrations/mcp',
    	byokSetup: {
    		setupInstructions:
    			'Use Granola MCP for browser OAuth access, or configure an Enterprise API key for REST transport.',
    		keyRotationSupported: false,
    		quotaTrackingSupported: false,
    	},
    });