kaiBLOCK
🧠 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.
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
e17329867ef8OBSERVED · 2026-10-10Connect
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 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]{
"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}"
}
}
}
}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.
| Tool | Risk | Description |
|---|---|---|
LangGraph | read | Python agent framework using LangGraph for stateful workflows |
amount | read | Amount in cents |
append-row | read | Append a row to a spreadsheet |
avatar | read | Avatar URL or base64 image |
backup | write | Create a database backup |
blocks | read | Block Kit blocks |
body | read | Email body (HTML or plain text) |
bucket | read | Bucket name |
call-function | read | Call a Supabase Edge Function |
cancel_url | read | URL to redirect if cancelled |
capture-payment | read | Capture an approved payment |
capture_id | read | Capture ID to refund |
categorize_file | read | Categorize file |
channel | read | Channel ID or name |
channel_id | read | Channel ID |
chat-completion | read | Generate a chat completion |
collection | read | Collection name |
content | read | Email content |
count | read | Number of connections to return |
count-tokens | read | Count tokens in text |
create-channel | write | Create a new channel in a team |
create-contact | write | Create a new contact |
create-folder | write | Create a folder in Google Drive |
create-issue | write | Create a new issue in a repository |
create-page | write | Create a new page in Notion |
create-payment | write | Create a new payment order |
create-payment-intent | write | Create a payment intent |
create-record | write | Create a new record |
create-webhook | write | Create a webhook for a channel |
currency | read | Currency code |
data | read | Record data |
database_id | read | Database ID |
description | read | Channel description |
display_name | read | Channel name |
doc_id | read | Document ID |
documents | write | Documents to insert |
download-file | read | Download a file from Google Drive |
email | read | Contact email |
embed-content | read | Generate embeddings for text |
embeddings | read | Generate embeddings for text |
embeds | read | Message embeds |
end_date | read | End date (ISO format) |
execute | destructive | Execute a SQL statement (insert, update, delete) |
fetch_api_documentation | read | Fetch and extract relevant information from an API documentation URL. Returns structured information about endpoints, authentication, etc. |
file_id | read | File ID |
filter | read | Query filter |
find | read | Find documents in a collection |
folder_id | read | Folder ID (root if not specified) |
from | read | Sender email |
function_name | read | Function name |
generate-content | read | Generate content using Gemini |
generate_connector_manifest | read | Generate a complete ConnectorManifest from the gathered integration information. Call this after you have collected enough information about the service. |
get-connections | read | Get user connections |
get-contact | read | Get a contact by email or ID |
get-doc | read | Get a document from Firestore |
get-issue | read | Get details of a Jira issue |
get-object | read | Get an object from S3 |
get-profile | read | Get the authenticated user profile |
get-pull-requests | read | List pull requests for a repository |
get-transactions | read | Get transaction history |
get-user | read | Get user profile by username |
get-values | read | Get values from a spreadsheet range |
guild_id | read | Discord guild/server ID |
health_check | read | Check if the Kai MCP server is running correctly. This tool verifies the MCP connection is working. Actions: - ping: Confirm MCP server is alive |
id | read | Record ID |
input | read | Input param |
insert | write | Insert documents into a collection |
issue_key | read | Issue key (e.g., PROJ-123) |
issue_type | read | Issue type (Bug, Task, Story) |
jql | read | JQL query string |
kai_ask | read | Quick 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_integration | write | Discover and add a new integration connector for any service, API, or tool. Use this when: - The user needs an integration that isn |
kai_initialize | write | Deploy agent-dev rules and optionally run onboarding to collect org/user context. USE THIS TOOL WHEN: - User says |
kai_learn | write | Send 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_context | read | Prepare 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_usage | read | View 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_integration | write | Execute 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_integration | read | Verify 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. |
key | read | Object key |
labels | write | Labels to apply |
limit | read | Max results |
list-channels | read | List available Slack channels |
list-customers | read | List customers |
list-files | read | List files in Google Drive |
list-messages | read | List emails from inbox |
list-objects | read | List objects in a bucket |
list-repos | read | List repositories for the authenticated user or organization |
list-teams | read | List teams the user is a member of |
list_existing_connectors | read | List connectors that are already registered. Use this to check if a connector already exists before creating a new one. |
list_knowledge_files | read | List all files in the knowledge base with summaries and metadata. Use this to decide which files to read. |
maxResults | read | Maximum number of results |
max_results | read | Maximum results (10-100) |
max_tokens | read | Maximum tokens |
merge | write | Merge with existing data |
messages | read | Chat messages |
mime_type | read | MIME type |
model | read | Model to use |
name | read | File name |
objectType | read | Salesforce object type |
op-1 | read | First operation |
op-2 | read | Second operation |
order_by | write | Field to order by |
order_id | write | PayPal order ID |
org | read | Organization name (optional) |
output_path | write | Path to save backup file |
owner | read | Repository owner |
page_id | read | Page ID |
page_size | read | Number of results per page |
params | read | Query parameters |
parent_id | read | Parent folder ID |
parse_openapi_spec | read | Parse an OpenAPI/Swagger specification and extract operations, authentication methods, and schemas. Returns structured connector information. |
post-share | write | Share content on LinkedIn |
post-tweet | write | Post a new tweet |
prefix | read | Key prefix |
priority | read | Priority level |
project_key | read | Project key (e.g., PROJ) |
prompt | read | Input prompt |
properties | read | Contact properties |
put-object | write | Upload an object to S3 |
query | write | Run a query |
query-collection | read | Query documents from a collection |
query-database | read | Query a Notion database |
range | read | A1 notation range (e.g., Sheet1!A1:D10) |
read_knowledge_file | read | Read the full content of a specific knowledge base file. Use after listing files to read ones relevant to the task/question. |
refund | read | Refund a captured payment |
register_connector | read | Register the generated connector manifest in the local registry. This makes the connector available for use. |
reply_to | read | Tweet ID to reply to |
repo | read | Repository name |
report_contradictions | read | Report 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_url | read | URL to redirect after approval |
search-issues | read | Search issues using JQL |
search-tweets | read | Search for tweets |
search_integration_info | read | Search for API documentation, authentication methods, and endpoint information for a service. Returns relevant documentation snippets. |
select | read | Columns to select |
select_files_for_context | read | Select files |
select_framework | read | Select a framework scaffold when the task involves building an agent, workflow, or LLM-powered application |
send-email | write | Send an email via Gmail |
send-message | write | Send a message to a Slack channel |
send-webhook | write | Send a message via webhook |
set-doc | write | Set/create a document in Firestore |
soql | read | SOQL query |
sorts | read | Sort conditions |
spreadsheet_id | read | Spreadsheet ID |
sql | write | SQL query to execute |
start | write | Pagination start index |
start_date | write | Start date (ISO format) |
state | read | PR state (open, closed, all) |
subject | read | Email subject |
summary | read | Issue summary |
table | read | Table name |
tables | read | Tables to backup (all if not specified) |
team_id | read | Team ID |
test-operation | read | A test operation |
text | read | Message text |
title | read | Issue title |
to | read | Recipient email address |
transition-issue | write | Move issue to a different status |
transition_id | read | Transition ID |
type | read | Repository type (all, public, private) |
update | write | Update data in a table |
update-page | write | Update an existing Notion page |
update-record | write | Update an existing record |
update-values | write | Update values in a spreadsheet range |
upload-file | write | Upload a file to Google Drive |
username | read | Twitter username |
values | write | Values to write (2D array) |
visibility | write | Post visibility (PUBLIC, CONNECTIONS) |
webhook_url | read | Webhook URL |
where | read | Where conditions |
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.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (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)
SLACK_BOT_TOKEN=xoxb-123456789012-1234567890123-abcdefghijklmnopqrstuv
const { stdout } = await exec(`op read "${opRef}"`);await exec(`op item edit "${ref.item}" --vault "${ref.vault}" "${ref.field}=${value}"`);await exec(
const { stdout } = await exec(`op item list --vault "${prefix}" --format json`);const { stdout } = await exec(`op item list --vault "${vault.name}" --format json`);const content = 'Use this key: sk-ant-api03-abcdefghijklmnopqrstuvwxyz12345678901234';
const content = 'AWS_ACCESS_KEY_ID=AKIAJ5QXWTRZ7M8NVGTA';
const content = 'DATABASE_URL=postgres://user:password123@localhost:5432/mydb';
const content = 'MONGO_URI=mongodb+srv://admin:[email protected]/db';
DATABASE_URL=postgres://user:pass123@host/db
api_key: "my-custom-api-key-here-1234567890"
const content = 'api_key: "abcdefghijklmnop1234567890"';
api_key = "my-custom-api-key-12345"
api_key = "aX7kM9pL2qR5tY8wB3nC6vD4"
api_key = "aX7kM9pL2qR5tY8wB3nC6vD4"
const content = 'Token: ghp_abcdefghijklmnopqrstuvwxyz1234567890';
-----BEGIN RSA PRIVATE KEY-----
const content = 'SLACK_TOKEN=xoxb-123456789012-1234567890123-abcdefghijklmnopqrstuv';
const content = 'stripe_key = sk_live_abcdefghijklmnopqrstuvwx';
execute
.rooignore
const hash = crypto.createHash('md5').update(projectPath).digest('hex');REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
Gates applied: critical_finding, no_behavioural_pass, no_license.
e17329867ef8full audit observations/trust-audit/mcp-server/aurite-ai__kai.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-10 | e17329867ef8 | BLOCK | F | 57 | first audit |
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.