AIR MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AIR_API_KEY | Yes | Your AIR API key for authentication. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tasks | {
"requests": {
"tools": {
"call": {}
}
}
} |
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| air_list_domainsA | List domains visible to the API key. For domain-scoped service account keys, returns the single bound domain. Requires domains:read scope. |
| air_get_domainA | Resolve a domain by pid from air_list_domains results, or by orgSlug + domainSlug via slug lookup. |
| air_list_projectsA | List projects in a domain (paginated). Requires domains:read and projects:read. Use domainPid from air_list_domains. |
| air_get_projectA | Resolve a project by pid from air_list_projects, or by orgSlug + domainSlug + projectSlug. |
| air_create_projectA | Create a project in a domain. Requires domains:write (fullPipeline preset). Returns project pid and slug. |
| air_searchA | Full-text search across orgs, domains, and projects. Requires search:read scope (fullPipeline preset; not included in assessmentRunner). |
| air_list_documentsA | List document sources for a project. Poll until status is connected before starting an assessment. Requires projects:read. |
| air_get_document_download_urlA | Get a presigned download URL for an uploaded document source. Requires projects:read. |
| air_list_artifactsB | List document-derived artifacts for a project. Use artifact pids in air_start_assessment. Requires projects:read. |
| air_get_artifact_textB | Get extracted plain text for an artifact. Requires projects:read. |
| air_upload_document_initA | Start a presigned upload: returns uploadUrl and s3Key. PUT the raw file bytes to uploadUrl with the same contentType you passed here and no other headers — the URL signs content-type and host only, so any x-amz-* header (notably the checksum headers AWS SDKs add by default) invalidates the signature. Then call air_upload_document_complete with the returned s3Key. Requires projects:write. |
| air_upload_document_completeA | Finalize a presigned upload after the PUT to uploadUrl succeeded. Dispatches the document extraction workflow. Requires projects:write. |
| air_list_assessmentsB | List assessment summaries for a project. Requires assessments:read. |
| air_get_assessmentB | Get assessment detail including status and workflowRunId. Requires assessments:read. |
| air_get_assessment_reportA | Fetch the structured risk assessment report for a completed run. Omit section to get the whole report; if it is too large for one response you get a section index instead — each section with its size and item count — so you can pull the parts you need. Pass section for one slice, and offset/limit to page through a list section such as riskRegister or evidenceAppendix. Requires assessments:read. |
| air_get_assessment_summaryA | Fetch a slim assessment report summary without the full risk/evidence payload: overview, quality, EU AI Act tier, section counts, the saved project choices (projectDecisions), and changesSincePrevious — each checklist item that closed, is still open, is new, or came back since the previous completed scan, plus whether the input documents changed. Read those labels as given; do not work out the match yourself. Prefer this over air_get_assessment_report for triage. Requires assessments:read. |
| air_list_open_factsA | List the deduplicated open EU AI Act fact worklist for an assessment (each missing fact once, with criteria it unblocks). Requires assessments:read. |
| air_submit_fact_answersA | Submit answers for open EU AI Act facts and re-derive the waterfall tier. Pass factPath + value (+ optional justification). Requires assessments:write. |
| air_get_assessment_stagesA | List per-stage checkpoint logs for an assessment run. Requires assessments:read. |
| air_get_assessment_input_artifactsB | List artifacts used as inputs when the assessment report was generated. Requires assessments:read. |
| air_create_assessment_draftA | Create an assessment draft without starting the pipeline. Requires assessments:write. |
| air_start_assessmentA | Start a risk assessment on a project. Consumes org credits and dispatches the risk pipeline. Requires assessments:write. Returns assessmentPid. |
| air_retry_assessmentA | Retry a failed assessment from the last completed stage. Requires assessments:write and consumes credits. |
| air_list_project_decisionsB | List saved choices for a project, each judged against assessmentPid. posture: stands (no later scan disagrees), conflicts (a later scan raised the topic again; show the saved sentence and ask again), settled (the accepted gap is no longer open). Requires projects:read. |
| air_record_project_decisionA | Save a developer choice on the project, in the person's own words. Ask them first. Use not_applicable when the whole topic (themeId) does not apply to this system: later scans keep that topic and its gaps quiet until one raises the topic again. Use accept_gap when the topic applies but the person accepts one missing control (controlId required): the gap stays listed with the saved sentence beside it. The scan the choice is recorded on does not judge it; later scans do. A later choice for the same theme or control replaces the earlier one. Requires projects:write. |
| air_get_domain_portfolioB | Domain-level portfolio dashboard. Requires portfolio:read (fullPipeline preset). Domain-scoped API keys only work for their bound domain. |
| air_submit_feedbackB | Send product feedback to Thalus. The person reviews the text before it is sent. A reply goes to the organization owner, or to an address the person gives. Works without an AIR account, where the person is asked for one. |
| air_request_creditsA | Ask Thalus for more assessment credits. The person reviews the amount and the reason before the request is sent, and Thalus replies by email to the organization owner. To buy credits immediately instead, call air_get_credit_balance for the purchase link. |
| air_get_credit_balanceA | Assessment credits available to this organization, with the plan and the cost per assessment. Call it before a batch of assessments so the limit is predicted instead of hit. |
| air_create_accountA | Open a form in this conversation to create an AIR account. The person types their own details and accepts the terms; the model supplies nothing. Needs no existing account. |
| air_signup_send_codeA | Signup form step one: send the verification code. Submitted by the form itself, not by the assistant. |
| air_signup_verify_codeA | Signup form step two: verify the code and create the account. Submitted by the form itself, not by the assistant. |
| air_sign_outA | Remove the AIR credentials stored on this machine and return to setup mode. The account itself is untouched. A key supplied through AIR_API_KEY cannot be removed here — the result says where to remove it instead. |
| air_wait_for_document_extractionA | Wait until sourcePid reaches connected or error, up to timeoutMs. Uses exponential backoff. Returns ready:false with the last observed status if the wait budget runs out — call again with the same sourcePid to keep waiting. Requires projects:read. |
| air_wait_for_assessmentA | Wait until an assessment is completed, failed, or reportAvailable, up to timeoutMs. Uses exponential backoff. Returns ready:false with the last observed status if the wait budget runs out — call again with the same assessmentPid to keep waiting. Requires assessments:read. |
| air_run_assessment_from_fileA | Upload a local file, wait for extraction, start assessment on the new artifact. Consumes credits. Requires projects:write and assessments:write. Returns an MCP Task handle immediately. Reads filePath with your OS user permissions. |
| air_run_full_assessment_pipelineB | Start assessment on existing artifacts, wait for completion, return report summary. Consumes credits. Returns an MCP Task handle immediately; poll tasks/get until completed. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| run-assessment-workflow | Guide through discover → upload → extract → assess → report using AIR MCP tools |
| review-assessment-report | Fetch and summarize an assessment report by assessmentPid |
| explore-portfolio | Explore domain portfolio dashboard for governance gaps (API key access) |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| AIR signup form |
TDQS
Scored across 37 tools
The tool set has many distinct operations, but several boundaries are blurry: air_get_assessment_report vs air_get_assessment_summary, air_start_assessment vs air_create_assessment_draft vs air_retry_assessment, and the high-level pipeline tools vs the individual start/wait/report tools. The detailed descriptions help, but an agent can still plausibly choose the wrong assessment or document tool for a given workflow.
All tools use a consistent air_ prefix and snake_case naming. The dominant pattern is verb_noun, with predictable sub-patterns for phased operations such as air_upload_document_init/complete and air_signup_send_code/verify_code.
At 37 tools, the set is well beyond the typical 3-15 range. The platform is broad, but there are many convenience and orchestration tools that overlap with lower-level tools, making the surface feel heavy rather than tightly scoped.
The server covers the core AIR assessment lifecycle well: domains, projects, document upload, artifacts, assessments, reports, facts, decisions, credits, and account/signup flows. Some lifecycle gaps remain, such as no update/delete for projects or documents and no assessment cancellation, but these are minor and workable for most agent workflows.