Your AI skills and MCP servers, in one repo.
Centralize your Agent Skills and MCP server configs in a single git repo. Install them to Claude Code, Codex, Pi, or OpenCode — per-repo or globally — with one command.
You use multiple AI coding tools. Each has its own config format and file locations. You've got skills scattered across repos, MCP configs copy-pasted between projects, and no single source of truth.
ai-kit is a personal monorepo for all of it:
your-ai-kit/
├── skills/
│ ├── writing-style/SKILL.md # your skills
│ ├── frontend-design/SKILL.md # third-party skills
│ └── ...
├── mcps/
│ ├── playwright.json # external MCP configs
│ └── ...
├── servers/
│ └── image-gen/index.ts # your own MCP servers
└── package.json
One ai-kit install claude and everything lands in the right place.
┌─────────────────────────────────────────────────────────────┐
│ ai-kit repo │
│ │
│ skills/ mcps/ servers/ │
│ ├── writing-style/ ├── playwright.json ├── image-gen/ │
│ ├── humanizer/ └── context7.json │
│ └── frontend-design/ │
└───────────────┬─────────────────────────────┬───────────────┘
│ ai-kit install │
┌──────┴──────┐ ┌──────┴──────┐
│ per-repo │ │ global │
└──────┬──────┘ └──────┬──────┘
│ │
┌────────┼────────┐ ┌──────┬────┴────┬──────┐
▼ ▼ ▼ ▼ ▼ ▼ ▼
Repo A Repo B Repo C Claude Codex OpenCode Pi
Skills use the Agent Skills standard — a SKILL.md format natively supported by Claude Code, Codex, Pi, Cursor, Gemini CLI, and 30+ other tools.
# Fork this repo on GitHub, then:
git clone https://github.com/YOUR_USERNAME/ai-kit.git ~/ai-kit
cd ~/ai-kit
bun install && bun linkRequires Bun. Zero runtime dependencies.
# Create a new skill from template
ai-kit add skill writing-style
# Or grab one from the skills.sh ecosystem
ai-kit add skill frontend-design --from anthropics/skills# Create a new MCP config from template
ai-kit add mcp playwrightThen edit mcps/playwright.json. Local stdio MCPs look like this:
{
"description": "Browser automation with Playwright",
"config": {
"command": "npx",
"args": ["-y", "@playwright/mcp"]
}
}Remote HTTP MCPs work too:
{
"description": "Documentation search",
"config": {
"url": "https://mcp.example.com/docs"
}
}Keep committed MCP configs secret-free. Use ${VAR} placeholders for machine-local secrets and paths:
{
"description": "Analytics MCP",
"config": {
"url": "https://mcp.example.com/analytics",
"headers": {
"Authorization": "Bearer ${ANALYTICS_API_TOKEN}"
}
}
}For services that don't have an MCP server, write one directly in the repo using FastMCP:
ai-kit add server image-genThis scaffolds servers/image-gen/index.ts with a FastMCP boilerplate. Add your tools:
import { FastMCP } from "fastmcp";
import { z } from "zod";
const server = new FastMCP("image-gen");
server.addTool({
name: "generate_image",
description: "Generate an image from a text prompt",
parameters: z.object({
prompt: z.string().describe("What to generate"),
}),
execute: async ({ prompt }) => {
// call your image API here
return "image generated";
},
});
server.start({ transportType: "stdio" });When you run ai-kit install, local servers are installed with their absolute path resolved automatically — no extra config needed.
# Install to Claude Code in the current repo
ai-kit install claude
# Install globally
ai-kit install claude --global
# Install to Codex, Pi, or OpenCode
ai-kit install codex
ai-kit install pi
ai-kit install opencode
# Cherry-pick what you need
ai-kit install claude --skills writing-style,humanizer --mcps playwrightThat's it. Commit your repo, and you have a portable, versioned collection of AI skills and MCP configs.
ai-kit treats the files in mcps/ as the canonical source of truth. Keep them portable and secret-free:
- Use exact
${VAR}placeholders for env values, headers, and machine-local paths - Use
Authorization: "Bearer ${VAR}"for bearer-token HTTP auth - Don't commit real API keys, passwords, or local credential file paths
Example stdio MCP with secret placeholders:
{
"description": "Example service",
"config": {
"command": "npx",
"args": ["-y", "example-mcp-server"],
"env": {
"SERVICE_USERNAME": "${SERVICE_USERNAME}",
"SERVICE_PASSWORD": "${SERVICE_PASSWORD}",
"CREDENTIALS_FILE": "${CREDENTIALS_FILE}"
}
}
}At install time, ai-kit renders those placeholders into each target's native config format:
- Claude Code:
${VAR}is written through as-is - OpenCode:
${VAR}becomes{env:VAR} - Codex: stdio env placeholders become
env_vars; HTTP header placeholders becomeenv_http_headers; bearer auth becomesbearer_token_env_var - Pi: no MCP support
Only two placeholder forms are supported in committed MCP JSON:
- Exact
${VAR} Bearer ${VAR}
Other interpolation forms like prefix-${VAR} or /path/${VAR}/file.json are intentionally not supported.
Both skills and MCPs (including local servers) support two install scopes:
- Per-repo (default) — installed into the current project directory. Only available when working in that repo.
- Global (
--global) — installed into your home directory. Available in every project.
| Target | Skills | MCPs |
|---|---|---|
| Claude | .agents/skills/<name>/SKILL.md |
.mcp.json |
| Codex | .agents/skills/<name>/SKILL.md |
.codex/config.toml |
| Pi | .agents/skills/<name>/SKILL.md |
— |
| OpenCode | .opencode/skills/<name>/SKILL.md |
opencode.json |
| Target | Skills | MCPs |
|---|---|---|
| Claude | ~/.claude/commands/<name>.md |
~/.claude/settings.json |
| Codex | ~/.agents/skills/<name>/SKILL.md |
~/.codex/config.toml |
| Pi | ~/.pi/agent/skills/<name>/SKILL.md |
— |
| OpenCode | ~/.config/opencode/skills/<name>/SKILL.md |
~/.config/opencode/opencode.json |
You can mix both — install some skills globally and others per-repo. ai-kit sync re-installs to all tracked locations.
| Command | What it does |
|---|---|
ai-kit install <target> |
Install skills + MCPs to a target |
ai-kit install <target> --global |
Install globally instead of per-repo |
ai-kit install <target> --skills a,b |
Install only specific skills |
ai-kit install <target> --mcps x,y |
Install only specific MCPs |
ai-kit list |
List all available skills and MCPs |
ai-kit add skill <name> |
Scaffold a new skill |
ai-kit add skill <name> --from <source> |
Fetch a skill from the ecosystem |
ai-kit add mcp <name> |
Scaffold a new MCP config |
ai-kit add server <name> |
Scaffold a local MCP server (FastMCP) |
ai-kit update |
Re-fetch all third-party skills |
ai-kit update <name> |
Re-fetch a specific third-party skill |
ai-kit detach <name> |
Detach a skill from its upstream source |
ai-kit sync |
Re-install to all previously tracked targets |
Not every skill is yours — some come from other people's repos. ai-kit tracks where they came from so you can update them later when the original author makes changes.
# Add a third-party skill
ai-kit add skill frontend-design --from anthropics/skills
# Update all third-party skills from their origins
ai-kit update
# Update a specific one
ai-kit update frontend-design
# Third-party skills are marked in the list
ai-kit list
# Customized a skill? Detach it so update won't overwrite your changes
ai-kit detach frontend-designUnder the hood this uses Vercel's skills CLI to fetch the skill. --from accepts any source format supported by that CLI, including GitHub shorthand like anthropics/skills and full URLs like https://github.com/anthropics/skills. A source.json is saved alongside the SKILL.md to record the origin. Running ai-kit detach <name> removes that source.json, converting it to a local skill that update will skip.
Browse available third-party skills at skills.sh.
- Copy, not symlink — portable across Docker, CI, and tools that don't follow symlinks
- Merge, not overwrite — MCP configs are merged into existing JSON/TOML, preserving your other entries
- Safe per-server merge — ai-kit only overrides the target-native MCP keys it emits for a given server, preserving unrelated local metadata in that same server entry
- Secret-free MCP placeholders — commit
${VAR}references once, then render them to each harness at install time - Agent Skills standard —
SKILL.mdworks across 30+ tools without conversion (Claude global commands are the one exception — the CLI handles it) - Local MCP servers — write your own with FastMCP, paths resolved automatically at install time
This repo is designed to be forked:
- Fork this repo to your GitHub
- Clone and run
bun install && bun link - Delete the example skills/MCPs/servers (or keep the ones you want)
- Add your own skills, MCPs, and local servers
- Commit and push — your AI toolkit is now versioned and portable
When you set up a new machine, clone your fork and run ai-kit install claude --global to get everything in place.
PRs welcome. If you add a new install target, drop it in src/targets/ and register it in src/install.ts.
bun test # run all tests
bun test --watch # watch mode