Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Photon MCP server

Vendor MCP
Open markdown

The Photon MCP connector routes your AI agent's tool calls to Photon's own MCP server through Scalekit. Each user signs in to Photon once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 140 tools.

Tools
140
What they doRead · write · destructive
80 · 42 · 1880 read42 write18 destructive
Users sign in with
OAuth app
Your own Photon MCP server app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Photon MCP connection

    In AgentKit > Connections, create a Photon MCP connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Photon MCP server connections use your own OAuth app. Register one with Photon MCP server and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Photon MCP connection.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'photonmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Photon MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'photonmcp_getaccount',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • photonmcp_checkprojectslugavailabilityCheck project slug availability Reports whether createProject would accept `slug` right now.Read-only

    Check project slug availability

    Check project slug availability Reports whether createProject would accept `slug` right now. Advisory: only the create itself allocates, so a caller must still handle SLUG_TAKEN. A malformed slug is rejected on shape; a reserved slug, a slug held by an active project, and a slug retired with a deleted project each answer `available: false` with a reason. API reference: https://photon.codes/docs/beta/api-reference/projects/check-project-slug-availability

    Inputs

    pathobjectrequired
    No description.
    queryobjectrequired
    No description.
  • photonmcp_countfilteredverificationcodesCount filtered verification codes Counts the verification codes Photon kept from this project's dedicated lines, optionally for one `platform`.Read-only

    Count filtered verification codes

    Count filtered verification codes Counts the verification codes Photon kept from this project's dedicated lines, optionally for one `platform`. Without `receivedAfter` and `receivedBefore` the window is the 30 days before the request; a window longer than 366 days is rejected. The response echoes the window it resolved, so the number always says which period it covers. Requires the platforms:read permission bound to the project resource in the path. API reference: https://photon.codes/docs/beta/api-reference/verification-codes/count-filtered-verification-codes

    Inputs

    pathobjectrequired
    No description.
    queryobject
    No description.
  • photonmcp_countmessagesCount Messages Counts matching Messages before pagination.Read-only

    Count Messages

    Count Messages Counts matching Messages before pagination. Delivery updates do not add Messages; results are eventually consistent. API reference: https://photon.codes/docs/beta/api-reference/messages/count-messages

    Inputs

    pathobjectrequired
    No description.
    queryobject
    No description.
  • photonmcp_countprojectsCount projects Counts the projects the same filter would list.Read-only

    Count projects

    Count projects Counts the projects the same filter would list. The count is read from the primary, so it is authoritative rather than replica-lagged. API reference: https://photon.codes/docs/beta/api-reference/projects/count-projects

    Inputs

    pathobjectrequired
    No description.
    queryobject
    No description.
  • photonmcp_countresourcefilteredverificationcodesCount a line's filtered verification codes Counts the verification codes Photon kept from one dedicated line.Read-only

    Count a line's filtered verification codes

    Count a line's filtered verification codes Counts the verification codes Photon kept from one dedicated line. Without `receivedAfter` and `receivedBefore` the window is the 30 days before the request; a window longer than 366 days is rejected. The response echoes the window it resolved, so the number always says which period it covers. Answers 404 unless the project holds the resource now. Codes from an earlier tenure stay in the project-wide list. Filter by `platform` — a dedicated line receives both iMessage and WhatsApp. Requires the platforms:read permission bound to the project resource in the path. API reference: https://photon.codes/docs/beta/api-reference/verification-codes/count-a-lines-filtered-verification-codes

    Inputs

    pathobjectrequired
    No description.
    queryobject
    No description.
  • photonmcp_countspacesCount Spaces Counts distinct Spaces matching the list filters; multiple matching Messages count once.Read-only

    Count Spaces

    Count Spaces Counts distinct Spaces matching the list filters; multiple matching Messages count once. Results are eventually consistent. API reference: https://photon.codes/docs/beta/api-reference/spaces/count-spaces

    Inputs

    pathobjectrequired
    No description.
    queryobject
    No description.
  • photonmcp_countusersCount Users Counts distinct Users matching the list filters, including incoming senders or outgoing recipients selected by Message filters.Read-only

    Count Users

    Count Users Counts distinct Users matching the list filters, including incoming senders or outgoing recipients selected by Message filters. Results are eventually consistent. API reference: https://photon.codes/docs/beta/api-reference/users/count-users

    Inputs

    pathobjectrequired
    No description.
    queryobject
    No description.
  • photonmcp_getaccountGet account Returns the profile of the authenticated account.Read-only

    Get account

    Get account Returns the profile of the authenticated account. The account is selected from the credential rather than a request parameter. A missing or deleted account is reported as an error instead of an empty profile. API reference: https://photon.codes/docs/beta/api-reference/account/get-account

    Inputs

    This tool takes no inputs.