Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Semaphore CI MCP server

Vendor MCP
Open markdown

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

Tools
18
What they doRead · write · destructive
15 · 3 · 015 read3 write0 destructive
Users sign in with
OAuth app
Scalekit's or your own

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 Semaphore CI MCP connection

    In AgentKit > Connections, create a Semaphore CI MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Semaphore CI MCP server, so you don't need to register an OAuth app.

  4. 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 = 'semaphorecimcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Semaphore CI 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: 'semaphorecimcp_organizations_list',
    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
  • semaphorecimcp_artifact_job_logsFetch a signed URL for full artifact-backed job logs in Semaphore CI.Read-only

    Artifact Job Logs

    Fetch a signed URL for full artifact-backed job logs in Semaphore CI.

    Inputs

    job_idstringrequired
    The UUID of the job whose artifact logs to fetch.
    organization_idstringrequired
    The UUID of the Semaphore CI organization.
  • semaphorecimcp_artifacts_listList artifacts for a project, workflow, or job scope in Semaphore CI.Read-only

    Artifacts List

    List artifacts for a project, workflow, or job scope in Semaphore CI.

    Inputs

    organization_idstringrequired
    The UUID of the Semaphore CI organization.
    scopestringrequired
    The scope level at which to list artifacts.one of projectsworkflowsjobs
    scope_idstringrequired
    The UUID of the scoped resource (project ID, workflow ID, or job ID).
    pathstring
    Optional path prefix to filter artifacts.
    project_idstring
    Optional project UUID for additional context filtering.
  • semaphorecimcp_artifacts_signed_urlGenerate a signed URL for a single artifact file in Semaphore CI.Read-only

    Artifacts Signed URL

    Generate a signed URL for a single artifact file in Semaphore CI.

    Inputs

    organization_idstringrequired
    The UUID of the Semaphore CI organization.
    pathstringrequired
    The artifact file path to generate a signed URL for.
    scopestringrequired
    The scope level of the artifact.one of projectsworkflowsjobs
    scope_idstringrequired
    The UUID of the scoped resource (project, workflow, or job).
    methodstring
    HTTP method for the signed URL (GET or HEAD).one of GETHEADdefault GET
    project_idstring
    Optional project UUID for additional filtering context.
  • semaphorecimcp_get_test_resultsFetch aggregated test results for a specific Semaphore CI job or pipeline.Read-only

    Get Test Results

    Fetch aggregated test results for a specific Semaphore CI job or pipeline.

    Inputs

    scopestringrequired
    Whether to fetch test results for a job or a pipeline.one of jobpipeline
    job_idstring
    The UUID of the job to fetch test results for (required when scope is 'job').
    pipeline_idstring
    The UUID of the pipeline to fetch test results for (required when scope is 'pipeline').
  • semaphorecimcp_jobs_describeGet detailed information about a specific Semaphore CI job including its status, timestamps, and configuration.Read-only

    Jobs Describe

    Get detailed information about a specific Semaphore CI job including its status, timestamps, and configuration.

    Inputs

    job_idstringrequired
    The UUID of the job to describe.
    organization_idstringrequired
    The UUID of the Semaphore CI organization.
    modestring
    Level of detail to return for the job.one of summarydetaileddefault summary
  • semaphorecimcp_jobs_logsRetrieve the execution logs for a Semaphore CI job.Read-only

    Jobs Logs

    Retrieve the execution logs for a Semaphore CI job.

    Inputs

    job_idstringrequired
    The UUID of the job whose logs to retrieve.
    organization_idstringrequired
    The UUID of the Semaphore CI organization.
  • semaphorecimcp_organizations_listList Semaphore CI organizations the authenticated user has access to.Read-only

    Organizations List

    List Semaphore CI organizations the authenticated user has access to.

    Inputs

    cursorstring
    Pagination cursor from a previous response.
    limitnumber
    Maximum number of organizations to return.