Developer

Integrate Celebrant with AI assistants and external tools.

Overview

Celebrant provides two ways for AI assistants and external tools to interact with your services:

Remote MCP Server

For Claude Desktop, Cursor, and other MCP-compatible AI tools. Connect with a single URL — authentication is handled automatically via OAuth.

REST API

For ChatGPT GPT Actions, custom scripts, and any HTTP client. OpenAPI 3.0 spec included.

Remote MCP Server

Connect Claude Desktop, Cursor, or any MCP-compatible client directly to Celebrant. No API key needed — you'll be prompted to sign in through your browser when you first connect.

Claude Desktop — Add Custom Connector

The quickest way: open Claude Desktop → Settings → MCP → Add Custom Connector, then paste this URL:

https://celebrant.app/api/mcp

Claude will auto-discover the server capabilities via /.well-known/mcp and prompt you to sign in through your browser on first use.

Claude Desktop — Manual Config

Alternatively, edit claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "celebrant": {
      "url": "https://celebrant.app/api/mcp"
    }
  }
}

Cursor

Add via Settings → MCP → Add Server:

{
  "mcpServers": {
    "celebrant": {
      "url": "https://celebrant.app/api/mcp"
    }
  }
}

How it works: When your MCP client connects, it will open a browser window for you to sign in to Celebrant and authorise the connection. After that, the client has full access to your services.

Available tools (24): create_service, get_service, update_service, list_services, archive_service, duplicate_service, add_section, update_section, remove_section, reorder_sections, list_service_types, apply_template, get_section_types, search_content, get_content_item, suggest_content, export_booklet_markdown, export_booklet_docx, get_preview_url, share_service, list_shares, update_share, remove_share, set_service_status

API Key Authentication

For automated scripts, headless environments, or clients that don't support OAuth. Create an API key in the API Keys tab, then pass it in the Authorization header.

MCP with API Key

{
  "mcpServers": {
    "celebrant": {
      "url": "https://celebrant.app/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

REST API — ChatGPT & HTTP Clients

Standard JSON API. Authenticate with your API key in the Authorization header.

Base URL

https://celebrant.app/api/v1

Authentication

Authorization: Bearer YOUR_API_KEY

ChatGPT GPT Actions

Import the OpenAPI spec URL in your GPT Action configuration:

https://celebrant.app/api/v1/openapi.json

Endpoints

MethodEndpointDescription
GET/servicesList your services
POST/servicesCreate a service
GET/services/:idGet service details
PATCH/services/:idUpdate service
DELETE/services/:idArchive service
POST/services/:id/sectionsAdd a section
PATCH/services/:id/sections/:sidUpdate section
DELETE/services/:id/sections/:sidRemove section
PUT/services/:id/sections/reorderReorder sections
PATCH/services/:id/statusSet status
POST/services/:id/duplicateDuplicate service
POST/services/:id/sharesShare service
GET/services/:id/export/markdownExport markdown
GET/services/:id/export/docxExport Word doc
GET/contentSearch content library
GET/content/:idGet content item
GET/content/suggestSmart suggestions
GET/service-typesList service types
GET/section-typesList section types

Quick Example

Create a service and add a hymn:

# Create a service
curl -X POST https://celebrant.app/api/v1/services \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"deceased_first_name": "John", "deceased_last_name": "Smith", "service_type": "CHURCH_OF_ENGLAND"}'

# Search for hymns
curl "https://celebrant.app/api/v1/content?content_type=HYMN&query=amazing+grace" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Add a hymn section
curl -X POST https://celebrant.app/api/v1/services/SERVICE_ID/sections \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"section_type": "HYMN", "order": 0, "content_item_id": "CONTENT_ID"}'