Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Basecamp

Scalekit connector
Open markdown

The Basecamp connector lets your AI agent act in each user's Basecamp account. Each user signs in to Basecamp once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 89 tools.

Tools
89
What they doRead · write · destructive
60 · 28 · 160 read28 write1 destructive
Users sign in with
OAuth app
Your own Basecamp 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 Basecamp connection

    In AgentKit > Connections, create a Basecamp 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

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

    Then enter the app's Client ID and Client Secret on the Basecamp 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 = 'basecamp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Basecamp:', 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: 'basecamp_account_get',
    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
  • basecamp_account_getGet the Basecamp account this connection is set up for.Read-only

    Get Account

    Get the Basecamp account this connection is set up for. Returns the account's id, name, owner and plan limits. Use basecamp_account_get to confirm which account the connection uses.

    Inputs

    This tool takes no inputs.

  • basecamp_answer_getGet one check-in answer by ID.Read-only

    Get Check-in Answer

    Get one check-in answer by ID. Returns the answer's HTML content, author, date and parent question. Use basecamp_answer_get for a single answer. Use basecamp_answers_list for all answers to a question.

    Inputs

    answer_idintegerrequired
    ID of the answer. Get it from basecamp_answers_list. Example: 1069479450.
  • basecamp_answers_listList the answers people gave to a check-in question.Read-only

    List Check-in Answers

    List the answers people gave to a check-in question. Returns each answer's id, HTML content, author and the date it is grouped under. Use basecamp_answers_list to read check-in responses. Use basecamp_answer_get for one answer.

    Inputs

    question_idintegerrequired
    ID of the question. Get it from basecamp_questions_list. Example: 1069479346.
    pageinteger
    Page number to fetch, starting at 1. Basecamp pages hold up to 50 items. Request the next page until a page comes back empty. Example: 2.
  • basecamp_assignable_people_listList the people who can be assigned to-dos.Read-only

    List Assignable People

    List the people who can be assigned to-dos. Returns each person's id, name and email address. Use basecamp_assignable_people_list to pick a person for basecamp_assigned_todos_get or for to-do assignments.

    Inputs

    This tool takes no inputs.

  • basecamp_assigned_todos_getGet the open to-dos assigned to one person across all projects.Read-only

    Get Assigned To-dos

    Get the open to-dos assigned to one person across all projects. Returns the person and their to-dos, grouped by project or by date. Use basecamp_assigned_todos_get to see someone's workload. Use basecamp_my_assignments_get for the connected user.

    Inputs

    person_idintegerrequired
    ID of the person. Get it from basecamp_assignable_people_list or basecamp_people_list. Example: 1049715913.
    group_bystring
    Group the to-dos by bucket (project) or by date.one of bucketdate
  • basecamp_campfire_getGet one Campfire group chat by ID.Read-only

    Get Campfire

    Get one Campfire group chat by ID. Returns the Campfire's title, project and the URL of its lines. Use basecamp_campfire_get for one chat's details. Use basecamp_campfire_lines_list for its messages.

    Inputs

    campfire_idintegerrequired
    ID of the campfire. Get it from basecamp_campfires_list, or the project's dock entry named chat. Example: 1069479341.
  • basecamp_campfire_line_getGet one Campfire chat line by ID.Read-only

    Get Campfire Line

    Get one Campfire chat line by ID. Returns the line's content, creator and timestamp. Use basecamp_campfire_line_get for a single line. Use basecamp_campfire_lines_list for the conversation.

    Inputs

    campfire_idintegerrequired
    ID of the campfire. Get it from basecamp_campfires_list, or the project's dock entry named chat. Example: 1069479341.
    line_idintegerrequired
    ID of the line. Get it from basecamp_campfire_lines_list. Example: 1069479350.
  • basecamp_campfire_lines_listList the chat lines (messages) in a Campfire.Read-only

    List Campfire Lines

    List the chat lines (messages) in a Campfire. Returns each line's id, content, creator and timestamp. Use basecamp_campfire_lines_list to read a chat. Use basecamp_campfire_line_create to post to it.

    Inputs

    campfire_idintegerrequired
    ID of the campfire. Get it from basecamp_campfires_list, or the project's dock entry named chat. Example: 1069479341.
    directionstring
    Sort direction: asc (oldest first) or desc (newest first).one of ascdesc
    pageinteger
    Page number to fetch, starting at 1. Basecamp pages hold up to 50 items. Request the next page until a page comes back empty. Example: 2.
    sortstring
    Field to sort by: created_at or updated_at.one of created_atupdated_at