Atlas / MCP servers / aurite-ai / kai

kaiBLOCK

mcp/aurite-ai/kai

🧠 Kai is a context engineering platform. It's persistent memory for AI coding copilots. Teach it once, surface context automatically. MCP server for Claude Code.

Verdict
BLOCK
Grade
F
Trust score
57 /100
Exposed tools
169 128r · 40w · 1d
Transport
stdio
License
—
Stars
8
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

🧠 Kai Your AI copilot's memory. Persistent context across sessions, projects, and teams. Give your coding agent the context it needs — automatically.

Works with Claude Code · more copilots coming soon

The Problem

Every time you start a new conversation with your AI copilot, it forgets everything.

  • 🔄 You repeat the same context about your project, your team, your standards
  • 🤷 The copilot makes mistakes you've already corrected in past sessions
  • 📄 Your policies, specs, and business rules sit in files the copilot never sees
  • 🧠 Decisions and rationale from past conversations are lost forever

Copilots are powerful — but they have amnesia.

The Solution

Kai gives your copilot a persistent memory that grows smarter over time.

How it works: Kai runs as an MCP server alongside your copilot. You teach it your context once — policies, specs, decisions, p

Read from source at commit e17329867ef8OBSERVED · 2026-10-10
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add kai-testing --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env KAI_USAGE_API_KEY=${KAI_USAGE_API_KEY} --env OPENAI_API_KEY=${OPENAI_API_KEY} --env PERPLEXITY_API_KEY=${PERPLEXITY_API_KEY} -- npx -y @aurite-ai/[email protected]
claude-desktop
{
  "mcpServers": {
    "kai-testing": {
      "command": "npx",
      "args": [
        "-y",
        "@aurite-ai/[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "KAI_USAGE_API_KEY": "${KAI_USAGE_API_KEY}",
        "OPENAI_API_KEY": "${OPENAI_API_KEY}",
        "PERPLEXITY_API_KEY": "${PERPLEXITY_API_KEY}"
      }
    }
  }
}
03

Exposed tools (169)

128 read · 40 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
LangGraphreadPython agent framework using LangGraph for stateful workflows
amountreadAmount in cents
append-rowreadAppend a row to a spreadsheet
avatarreadAvatar URL or base64 image
backupwriteCreate a database backup
blocksreadBlock Kit blocks
bodyreadEmail body (HTML or plain text)
bucketreadBucket name
call-functionreadCall a Supabase Edge Function
cancel_urlreadURL to redirect if cancelled
capture-paymentreadCapture an approved payment
capture_idreadCapture ID to refund
categorize_filereadCategorize file
channelreadChannel ID or name
channel_idreadChannel ID
chat-completionreadGenerate a chat completion
collectionreadCollection name
contentreadEmail content
countreadNumber of connections to return
count-tokensreadCount tokens in text
create-channelwriteCreate a new channel in a team
create-contactwriteCreate a new contact
create-folderwriteCreate a folder in Google Drive
create-issuewriteCreate a new issue in a repository
create-pagewriteCreate a new page in Notion
create-paymentwriteCreate a new payment order
create-payment-intentwriteCreate a payment intent
create-recordwriteCreate a new record
create-webhookwriteCreate a webhook for a channel
currencyreadCurrency code
datareadRecord data
database_idreadDatabase ID
descriptionreadChannel description
display_namereadChannel name
doc_idreadDocument ID
documentswriteDocuments to insert
download-filereadDownload a file from Google Drive
emailreadContact email
embed-contentreadGenerate embeddings for text
embeddingsreadGenerate embeddings for text
embedsreadMessage embeds
end_datereadEnd date (ISO format)
executedestructiveExecute a SQL statement (insert, update, delete)
fetch_api_documentationreadFetch and extract relevant information from an API documentation URL. Returns structured information about endpoints, authentication, etc.
file_idreadFile ID
filterreadQuery filter
findreadFind documents in a collection
folder_idreadFolder ID (root if not specified)
fromreadSender email
function_namereadFunction name
generate-contentreadGenerate content using Gemini
generate_connector_manifestreadGenerate a complete ConnectorManifest from the gathered integration information. Call this after you have collected enough information about the service.
get-connectionsreadGet user connections
get-contactreadGet a contact by email or ID
get-docreadGet a document from Firestore
get-issuereadGet details of a Jira issue
get-objectreadGet an object from S3
get-profilereadGet the authenticated user profile
get-pull-requestsreadList pull requests for a repository
get-transactionsreadGet transaction history
get-userreadGet user profile by username
get-valuesreadGet values from a spreadsheet range
guild_idreadDiscord guild/server ID
health_checkreadCheck if the Kai MCP server is running correctly. This tool verifies the MCP connection is working. Actions: - ping: Confirm MCP server is alive
idreadRecord ID
inputreadInput param
insertwriteInsert documents into a collection
issue_keyreadIssue key (e.g., PROJ-123)
issue_typereadIssue type (Bug, Task, Story)
jqlreadJQL query string
kai_askreadQuick Q&A using the project knowledge base. USE THIS TOOL WHEN: - Mid-task and need specific information - User asks a direct question about the project - Need clarification on a decision or pattern - Need information beyond what
kai_discover_integrationwriteDiscover and add a new integration connector for any service, API, or tool. Use this when: - The user needs an integration that isn
kai_initializewriteDeploy agent-dev rules and optionally run onboarding to collect org/user context. USE THIS TOOL WHEN: - User says
kai_learnwriteSend files or folders to Kai to learn from and add to the knowledge base. USE THIS TOOL WHEN: - User shares files/folders and wants Kai to
kai_prepare_contextreadPrepare the .kai/context-guide.md with relevant knowledge for a task. USE THIS TOOL WHEN: - Starting any new task or feature - User describes what they want to build - Before beginning implementation work - User asks
kai_usagereadView token usage and cost summary for the current project. USE THIS TOOL WHEN: - User asks about usage, costs, or token consumption - User wants to see how much they
kai_use_integrationwriteExecute an operation on a discovered integration. Use this tool to interact with external services (APIs, databases, etc.) that Kai has learned about. The integration must first be discovered using kai_learn on files that describe it. Examples: - Query a database: integration=
kai_verify_integrationreadVerify that an integration is correctly configured and can connect. Use this tool to test if an integration is working before using it. Checks that credentials are available and attempts a simple operation to verify connectivity. Can verify a single integration or all discovered integrations.
keyreadObject key
labelswriteLabels to apply
limitreadMax results
list-channelsreadList available Slack channels
list-customersreadList customers
list-filesreadList files in Google Drive
list-messagesreadList emails from inbox
list-objectsreadList objects in a bucket
list-reposreadList repositories for the authenticated user or organization
list-teamsreadList teams the user is a member of
list_existing_connectorsreadList connectors that are already registered. Use this to check if a connector already exists before creating a new one.
list_knowledge_filesreadList all files in the knowledge base with summaries and metadata. Use this to decide which files to read.
maxResultsreadMaximum number of results
max_resultsreadMaximum results (10-100)
max_tokensreadMaximum tokens
mergewriteMerge with existing data
messagesreadChat messages
mime_typereadMIME type
modelreadModel to use
namereadFile name
objectTypereadSalesforce object type
op-1readFirst operation
op-2readSecond operation
order_bywriteField to order by
order_idwritePayPal order ID
orgreadOrganization name (optional)
output_pathwritePath to save backup file
ownerreadRepository owner
page_idreadPage ID
page_sizereadNumber of results per page
paramsreadQuery parameters
parent_idreadParent folder ID
parse_openapi_specreadParse an OpenAPI/Swagger specification and extract operations, authentication methods, and schemas. Returns structured connector information.
post-sharewriteShare content on LinkedIn
post-tweetwritePost a new tweet
prefixreadKey prefix
priorityreadPriority level
project_keyreadProject key (e.g., PROJ)
promptreadInput prompt
propertiesreadContact properties
put-objectwriteUpload an object to S3
querywriteRun a query
query-collectionreadQuery documents from a collection
query-databasereadQuery a Notion database
rangereadA1 notation range (e.g., Sheet1!A1:D10)
read_knowledge_filereadRead the full content of a specific knowledge base file. Use after listing files to read ones relevant to the task/question.
refundreadRefund a captured payment
register_connectorreadRegister the generated connector manifest in the local registry. This makes the connector available for use.
reply_toreadTweet ID to reply to
reporeadRepository name
report_contradictionsreadReport files in the knowledge base that contradict the new file being categorized. Use the full path (subdirectory/slug) from the list_knowledge_files output.
return_urlreadURL to redirect after approval
search-issuesreadSearch issues using JQL
search-tweetsreadSearch for tweets
search_integration_inforeadSearch for API documentation, authentication methods, and endpoint information for a service. Returns relevant documentation snippets.
selectreadColumns to select
select_files_for_contextreadSelect files
select_frameworkreadSelect a framework scaffold when the task involves building an agent, workflow, or LLM-powered application
send-emailwriteSend an email via Gmail
send-messagewriteSend a message to a Slack channel
send-webhookwriteSend a message via webhook
set-docwriteSet/create a document in Firestore
soqlreadSOQL query
sortsreadSort conditions
spreadsheet_idreadSpreadsheet ID
sqlwriteSQL query to execute
startwritePagination start index
start_datewriteStart date (ISO format)
statereadPR state (open, closed, all)
subjectreadEmail subject
summaryreadIssue summary
tablereadTable name
tablesreadTables to backup (all if not specified)
team_idreadTeam ID
test-operationreadA test operation
textreadMessage text
titlereadIssue title
toreadRecipient email address
transition-issuewriteMove issue to a different status
transition_idreadTransition ID
typereadRepository type (all, public, private)
updatewriteUpdate data in a table
update-pagewriteUpdate an existing Notion page
update-recordwriteUpdate an existing record
update-valueswriteUpdate values in a spreadsheet range
upload-filewriteUpload a file to Google Drive
usernamereadTwitter username
valueswriteValues to write (2D array)
visibilitywritePost visibility (PUBLIC, CONNECTIONS)
webhook_urlreadWebhook URL
wherereadWhere conditions
04

Trust audit

BLOCKgrade F · trust 57/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (3 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

CRITICALHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/mcp/scripts/test-vault.ts:69
SLACK_BOT_TOKEN=xoxb-123456789012-1234567890123-abcdefghijklmnopqrstuv
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
apps/mcp/src/vault/1password-provider.ts:230
const { stdout } = await exec(`op read "${opRef}"`);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
apps/mcp/src/vault/1password-provider.ts:268
await exec(`op item edit "${ref.item}" --vault "${ref.vault}" "${ref.field}=${value}"`);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
apps/mcp/src/vault/1password-provider.ts:276
await exec(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
apps/mcp/src/vault/1password-provider.ts:302
const { stdout } = await exec(`op item list --vault "${prefix}" --format json`);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
apps/mcp/src/vault/1password-provider.ts:314
const { stdout } = await exec(`op item list --vault "${vault.name}" --format json`);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:30
const content = 'Use this key: sk-ant-api03-abcdefghijklmnopqrstuvwxyz12345678901234';
MEDIUMHard-coded secrets · secret.aws · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:50
const content = 'AWS_ACCESS_KEY_ID=AKIAJ5QXWTRZ7M8NVGTA';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:86
const content = 'DATABASE_URL=postgres://user:password123@localhost:5432/mydb';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:95
const content = 'MONGO_URI=mongodb+srv://admin:[email protected]/db';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:228
DATABASE_URL=postgres://user:pass123@host/db
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/mcp/scripts/test-vault.ts:72
api_key: "my-custom-api-key-here-1234567890"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:130
const content = 'api_key: "abcdefghijklmnop1234567890"';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:153
api_key = "my-custom-api-key-12345"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:256
api_key = "aX7kM9pL2qR5tY8wB3nC6vD4"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:271
api_key = "aX7kM9pL2qR5tY8wB3nC6vD4"
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:68
const content = 'Token: ghp_abcdefghijklmnopqrstuvwxyz1234567890';
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:105
-----BEGIN RSA PRIVATE KEY-----
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:59
const content = 'SLACK_TOKEN=xoxb-123456789012-1234567890123-abcdefghijklmnopqrstuv';
MEDIUMHard-coded secrets · secret.stripe · CWE-798, CWE-321
apps/mcp/src/vault/__tests__/sensitive-detection.test.ts:77
const content = 'stripe_key = sk_live_abcdefghijklmnopqrstuvwx';
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
execute
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.rooignore
.rooignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.no_license · CWE-1104
Why it matters. no LICENSE file and no repo licence
Fix. add a licence
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
apps/mcp/src/tools/onboarding-check.ts:45
const hash = crypto.createHash('md5').update(projectPath).digest('hex');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/mcp/scripts/setup-claude.sh:8
REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"

Gates applied: critical_finding, no_behavioural_pass, no_license.

Audited 2026-10-10 · audit v0.4.1 · source sha e17329867ef8full audit observations/trust-audit/mcp-server/aurite-ai__kai.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-10e17329867ef8BLOCKF57first audit
06

Questions

What is the kai MCP server?

🧠 Kai is a context engineering platform. It's persistent memory for AI coding copilots. Teach it once, surface context automatically. MCP server for Claude Code.

What tools does kai expose?

169 in total: 128 read-only, 40 that write, and 1 that can delete or overwrite (execute). Every one is listed on this page with its risk.

Is kai safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (57/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does kai need?

It reads ANTHROPIC_API_KEY, KAI_USAGE_API_KEY, OPENAI_API_KEY, PERPLEXITY_API_KEY and TEST_1PASSWORD from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does kai run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @aurite-ai/kai-testing at 0.0.0.

How current is this page?

The grade is for one exact copy of the source (e17329867ef8), read on 2026-10-10. The repository is watched and re-audited when it changes.

Advertisement