Skip to main content
Glama
kula-ai

@kula-ai/mcp-server

Official
by kula-ai

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
KULA_API_KEYYesYour Kula API key

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_job_postsA

List published job posts on the job board. Only use when the user explicitly asks about job board listings.

get_job_postA

Get details of a specific job post from the job board. Only use when the user asks about a specific job board listing.

list_jobsA

List jobs with SQL-based filters and sorting. Use this for browsing jobs or filtering by status, department, office, or date ranges. For title search (partial match supported), use search_jobs instead.

search_jobsA

Search jobs by title (partial match supported) with optional filters. Preferred over list_jobs when you need to find jobs by name. Results are sorted by relevance.

get_jobA

Retrieve full details of a specific job by ID, including description and interview stages. Use this when you already have the job ID. To find a job by title, use search_jobs first.

list_applicationsA

List job applications. Only use when the user explicitly asks about applications.

get_applicationA

Get details of a specific application. Only use when the user asks about a specific application.

update_application_stageC

Update the stage of a specific application.

list_application_notesC

List notes on a specific application.

create_application_noteB

Add a note to a specific application.

update_application_noteB

Update an existing note on an application.

create_candidateA

Create a new candidate in Kula. At least one of email or linkedin_url (in social_urls) is required. Optionally link to a job pipeline via job_id and job_stage_id. Returns the created candidate object.

list_candidatesA

List candidates with simple filters: email, date ranges, and sorting. Use this for browsing or filtering by exact email. For full-text search or filtering by skills, tags, location, job pipeline, or resume presence — use search_candidates instead.

search_candidatesA

Search candidates using Elasticsearch with rich filters and cursor-based pagination. Preferred over list_candidates when you need: full-text search (name, email, resume), filtering by skills, tags, sources, job pipeline, location, or resume presence. Pagination: pass cursor from the previous response meta.next_cursor to get the next page. IMPORTANT: if you change any filter or search parameter, omit cursor and start a new request — cursors are tied to a specific search context and will return wrong results if filters change.

get_candidateA

Retrieve full details of a specific candidate by ID, including all applications, tags, skills, and location. Use this when you already have the candidate ID. To find a candidate by name or attributes, use search_candidates first.

update_candidateA

Update an existing candidate's profile. All fields are optional — only send the fields you want to change. Returns the updated candidate object.

list_webhooksB

List all configured webhooks.

create_webhookB

Create a new webhook subscription.

get_webhookB

Get details of a specific webhook.

update_webhookA

Update an existing webhook configuration. Only include fields you want to change.

delete_webhookB

Delete a webhook.

enable_webhookA

Enable a disabled webhook.

disable_webhookA

Disable an active webhook.

rotate_webhook_secretB

Rotate the signing secret for a webhook.

test_webhookA

Send a test payload to a webhook and wait for the delivery result. Polls until delivered or failed (30s timeout).

list_webhook_logsA

List recent delivery logs for a webhook, including status and response details for each attempt.

list_webhook_eventsB

List all available webhook event types you can subscribe to.

get_webhook_sample_payloadB

Get a sample webhook payload for a specific event type.

search_companiesB

Search companies by name. Useful for autocompleting company names.

list_industriesB

List all available industries.

search_locationsA

Search locations by query. Useful for autocompleting city or region names.

search_institutionsA

Search academic institutions by name. Useful for autocompleting university or school names.

search_disciplinesA

Search academic disciplines by name. Useful for autocompleting field of study.

list_degreesB

List all available academic degrees.

list_departmentsA

List all departments as a flat paginated list. Each record has a parent_id to reconstruct the hierarchy client-side.

list_officesB

List all offices in the organization.

list_milestonesB

List all hiring milestones (pipeline stage groupings) in the organization.

list_custom_fieldsA

List custom fields configured in the organization. The type parameter is required — specify job, candidate, requisition, or offer.

list_rejection_reasonsB

List all rejection reasons configured in the organization.

list_sourcesB

List all candidate sources in the organization.

list_requisitionsC

List all requisitions for your account, respecting permissions.

get_requisitionB

Get detailed information about a specific requisition, including description and custom field values.

list_requisition_fieldsA

List default and custom field definitions for requisitions. Hidden fields are excluded. Optionally filter by department or office.

create_requisitionA

Create a new requisition. When head_count exceeds 1, creates a group of linked requisitions. Use list_requisition_fields to get available custom field IDs for additional_info.

update_requisitionA

Update an existing requisition. Cannot modify requisitions with closed, archived, or filled statuses. Pass all custom field values in additional_info — omitted fields will be cleared.

close_requisitionA

Close a requisition. Only requisitions in a closeable state can be closed.

list_scorecard_submissionsA

List scorecards for a specific application. Each scorecard may be linked to an interview, assessment, or review — use the type filter to narrow by activity type.

list_job_stagesC

List all pipeline stages for a specific job.

create_job_stageB

Create a new pipeline stage for a job.

list_stage_activitiesB

List all activities (actions) configured for a specific job stage.

list_interviewsA

List interviews for the account. Supports rich multi-value filters: by job, application, candidate, interviewer, organizer, recruiter, department, office, status, kind, location, AI note-taker flag, and start_time window. Cancelled interviews are included by default — use meeting_status=cancelled etc. to filter.

list_application_interviewsA

List the interviews scheduled on a specific application. Same as list_interviews but scoped to one application (the application_id goes in the path, not as a filter). Cancelled interviews are included by default — use meeting_status=cancelled etc. to filter.

get_interviewA

Get full details for a single interview, including interviewers, candidate, conference URL, scorecard refs.

create_interviewA

Schedule an interview against an application. Calendar invites and conference URL are provisioned asynchronously — subscribe to the interview.event.created webhook to receive the fully-provisioned interview.

Typical workflow:

  1. Plan-driven: get_interview_plan → pick a stage_activity_idcheck_interviewers_availabilitycreate_interview with stage_activity_id (scorecard config inherits from the activity; pass scorecard_template_id only when stage_activity_id is NOT set).

  2. Ad-hoc: list_valid_organizers (organizer_id) → list_applications (application_id) → check_interviewers_availabilitycreate_interview.

Where to discover IDs:

  • application_idlist_applications

  • organizer_idlist_valid_organizers (filtered by job_id)

  • interviewer_idslist_users (any active user)

  • office_idlist_offices (required when location=onsite)

  • host_idlist_conference_hosts (required when location=zoom; must be in interviewer_ids)

  • stage_activity_idget_interview_plan

  • interviewer_template_id / candidate_template_idlist_email_templates

  • scorecard_template_idlist_scorecard_templates

Constraints:

  • start_time must be on a 15-minute boundary with zero seconds (e.g. 09:00:00, 09:15:00) and in the future

  • duration_minutes must be a multiple of 15 (15..1440)

  • kind: one_on_one requires exactly one entry in interviewer_ids

update_interviewA

Update an existing interview. All fields are optional — only the supplied fields are modified. Immutable fields (cannot be changed after creation): organizer_id, application_id, job_id, stage_id, candidate_id, stage_activity_id, scorecard_template_id. Cancelled interviews cannot be updated (returns 422 err_interview_cancelled).

cancel_interviewA

Cancel a scheduled interview. Calendar events are torn down and cancellation notifications dispatched asynchronously. Cannot cancel: already-cancelled interviews (err_interview_already_cancelled), or completed HackerRank interviews (err_cannot_cancel_completed_hackerrank).

mark_candidate_no_showA

Mark the candidate as a no-show on an in_progress or ended interview. Cannot be marked when a scorecard has been submitted.

undo_candidate_no_showA

Reverse a candidate no-show. Allowed only when meeting_status is candidate_no_show.

check_interviewers_availabilityA

Compute free interview slots across the organizer + interviewers' calendars. Async — returns a poll_id immediately. Get the result two ways: (a) call get_interviewers_availability_result with the poll_id, or (b) subscribe to the interview.availability.computed webhook (recommended for production — avoids polling). Result expires 1 hour after computation.

Each returned slot carries interviewer_ids — the user IDs free at that range. For panel, every slot lists every interviewer in the request (a panel slot requires all of them to be free). For one_on_one, each slot lists the subset free at that range; pick one of those IDs when calling create_interview.

get_interviewers_availability_resultA

Poll for the result of a previous check_interviewers_availability call. Returns 200 with status=succeeded/failed when terminated, 202 with status=pending while running, 410 if expired (1-hour TTL after completion). Respect the Retry-After header — don't poll faster than every 5s. For production loads, prefer the interview.availability.computed webhook.

Each slot in the response includes interviewer_ids — the user IDs free at that slot. Use one of those IDs as interviewer_ids (and host_id for zoom) when calling create_interview.

list_valid_organizersA

List users eligible to be the organizer_id when scheduling an interview for a job — they have a connected calendar (Google or Microsoft) and permission to manage candidates on the job.

list_conference_hostsA

List users eligible to be the conference host_id (e.g., for Zoom — they have an active workspace seat). Used when scheduling video-conference interviews.

get_interview_planA

Read the interview plan configured on a job — stages with their pre-configured interview activities. Each activity's id is the stage_activity_id to pass to create_interview (which inherits the activity's scorecard config).

list_scorecard_templatesA

List scorecard templates configured for the account. Use this to discover scorecard_template_id values to pass to create_interview (only honored when stage_activity_id is NOT set — interview-plan activities own scorecard config).

get_scorecard_templateA

Get full details for a single scorecard template — questions, feedback/rating descriptions, and segmentation.

list_email_templatesA

List email and calendar-invite templates configured for the account. Per-interview snapshots and system templates are excluded. Use this to discover interviewer_template_id and candidate_template_id for create_interview.

get_email_templateA

Get full details for a single email or calendar-invite template, including subject, body, and owner.

list_usersB

List users in the organization. Defaults to active users; use the status filter to include pending, deactivated, or imported. Supports filtering by role, department, office, granted permissions, and a full-text query across name and email.

get_userA

Retrieve a single user by ID. Response includes a permissions array of resource:action keys granted by the user's role.

create_userA

Invite a new user to the account. The user is created in the pending state and sent an invitation email. Requires email and first_name.

update_userA

Update an existing user. Only supplied fields are modified. Email and account status cannot be changed via this endpoint.

deactivate_userA

Deactivate a user. The user can no longer sign in but their historical activity is preserved.

reactivate_userC

Reactivate a previously deactivated user.

list_rolesA

List roles available in the account. Use this to discover valid role_id values for create_user and update_user.

get_roleA

Retrieve a single role by ID. Response includes a permissions object mapping resource:action keys (e.g. users:manage, jobs:read) to booleans indicating whether the role grants each one.

find_locationsA

Search cities, states, and countries. The returned type discriminator (city|state|country) tells you which places_*_id field on candidate endpoints the id maps to. City results also include state_id and country_id (parent chain); State results include country_id; Country results have both as null.

find_companiesB

Search the global company catalog. Returned IDs map to current_company_ids on candidate search.

find_industriesB

List industries used to classify companies. Paginated; useful for discovering valid industry options.

find_institutionsB

Search academic institutions. Returned IDs map to institute_ids on candidate search.

find_disciplinesB

Search academic disciplines (fields of study).

find_degreesB

List academic degrees, optionally filtered by name. Useful for discovering valid degree options for candidate education records.

find_tagsA

Search candidate tags (account-scoped). Returned IDs map to tag_ids on candidate search.

find_skillsA

Search the global skill catalog. Returned IDs map to skill_ids on candidate search.

find_currenciesA

List currencies. Returned IDs map to salary_currency_id on requisitions.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kula-ai/kula-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server