Kiro-mcp-ui
Kiro MCP Server Manager
A web UI to manage Model Context Protocol (MCP) servers for Kiro CLI.
Features
- Read/write
~/.kiro/settings/mcp.jsondirectly - Add/Edit/Remove MCP servers via form, presets, or raw JSON
- Toggle enable/disable servers with one click
- Health Check — probes each server via MCP JSON-RPC protocol, shows active/error status and tool count
- 22 presets — AWS Docs, GitHub, Playwright, Gmail, Slack, PostgreSQL, Redis, and more
- Import/Export config as JSON file
- View JSON — see raw config
- Supports both local (stdio) and remote (HTTP/SSE) server types
- Falls back to localStorage if backend is unavailable
Quick Start
git clone https://github.com/subnanih/Kiro-mcp-ui.git
cd Kiro-mcp-ui
node server.js
Open http://localhost:3456
No dependencies required — just Node.js (v16+).
How It Works
┌─────────────────┐ ┌──────────────┐ ┌─────────────────────────┐
│ Browser UI │ ──API── │ server.js │ ──R/W── │ ~/.kiro/settings/mcp.json│
│ (index.html) │ │ (port 3456) │ └─────────────────────────┘
└─────────────────┘ │ │
│ /api/probe │ ──spawn──▶ MCP Server (stdio)
└──────────────┘ initialize → tools/list
GET /api/config— reads mcp.jsonPUT /api/config— writes mcp.jsonGET /api/probe— spawns each MCP server, sends JSON-RPCinitialize+tools/list, reports status & toolsGET /api/probe/:name— probe a single server
MCP Config Format
Kiro CLI reads MCP config from ~/.kiro/settings/mcp.json:
{
"mcpServers": {
"server-name": {
"command": "npx",
"args": ["-y", "@package/name"],
"env": {
"API_KEY": "${MY_API_KEY}"
},
"disabled": false,
"autoApprove": [],
"disabledTools": []
}
}
}
Local Server Properties
| Property | Type | Required | Description |
|----------|------|----------|-------------|
| command | String | Yes | Command to run the MCP server |
| args | Array | No | Arguments to pass to the command |
| env | Object | No | Environment variables (supports ${VAR} expansion) |
| disabled | Boolean | No | Whether the server is disabled |
| autoApprove | Array | No | Tool names to auto-approve |
| disabledTools | Array | No | Tool names to exclude |
Remote Server Properties
| Property | Type | Required | Description |
|----------|------|----------|-------------|
| url | String | Yes | HTTPS endpoint for the remote MCP server |
| headers | Object | No | Headers for connection |
| disabled | Boolean | No | Whether the server is disabled |
Adding MCP Servers via CLI
You can also add servers via Kiro CLI directly:
kiro-cli mcp add \
--name "server-name" \
--scope global \
--command "npx" \
--args "-y @package/name" \
--env "KEY=value"
Presets Included
| Preset | Package | Description |
|--------|---------|-------------|
| AWS Docs | uvx awslabs.aws-documentation-mcp-server@latest | Search & read AWS documentation |
| GitHub | docker ghcr.io/github/github-mcp-server | Repos, issues, PRs |
| Playwright | npx @playwright/mcp@latest | Browser automation & testing |
| Puppeteer | npx @modelcontextprotocol/server-puppeteer | Chrome browser control |
| Fetch | uvx mcp-server-fetch | Fetch web pages |
| Brave Search | npx @modelcontextprotocol/server-brave-search | Web search |
| Filesystem | npx @modelcontextprotocol/server-filesystem | Local file read/write |
| Memory | npx @modelcontextprotocol/server-memory | Persistent knowledge graph |
| Sequential Thinking | npx @modelcontextprotocol/server-sequential-thinking | Step-by-step reasoning |
| Git | uvx mcp-server-git | Git repo operations |
| Docker | npx @modelcontextprotocol/server-docker | Container management |
| PostgreSQL | npx @modelcontextprotocol/server-postgres | Query Postgres databases |
| SQLite | uvx mcp-server-sqlite | Local SQLite databases |
| Redis | npx @modelcontextprotocol/server-redis | Redis operations |
| Slack | npx @modelcontextprotocol/server-slack | Read/send Slack messages |
| Google Maps | npx @modelcontextprotocol/server-google-maps | Places, directions |
| Linear | npx @modelcontextprotocol/server-linear | Issue tracking |
| Notion | npx @modelcontextprotocol/server-notion | Pages & databases |
| Sentry | npx @modelcontextprotocol/server-sentry | Error tracking |
| EverArt | npx @modelcontextprotocol/server-everart | AI image generation |
| Cloudflare | npx @cloudflare/mcp-server-cloudflare | Workers, KV, D1, R2 |
| Gmail | uvx mcp-gsuite | Read, draft, reply to emails |
Gmail MCP Setup
The Gmail preset uses mcp-gsuite or @gongrzhe/server-gmail-autoauth-mcp.
Option A: @gongrzhe/server-gmail-autoauth-mcp (Recommended for Kiro)
Simpler setup, won't block Kiro on startup after initial auth.
1. Create Google Cloud OAuth Credentials
- Go to Google Cloud Console
- Create/select a project
- Enable Gmail API
- Go to Credentials → Create OAuth Client ID → Desktop app
- Add redirect URI:
http://localhost:3000/oauth2callback - Note your Client ID and Client Secret
2. Save OAuth Keys
mkdir -p ~/.gmail-mcp
cat > ~/.gmail-mcp/gcp-oauth.keys.json << 'EOF'
{
"installed": {
"client_id": "YOUR_CLIENT_ID.apps.googleusercontent.com",
"client_secret": "YOUR_CLIENT_SECRET",
"redirect_uris": ["http://localhost:3000/oauth2callback"],
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token"
}
}
EOF
3. Authenticate (one-time)
npx -y @gongrzhe/server-gmail-autoauth-mcp auth
This opens your browser. Sign in and grant Gmail access. Token saves to ~/.gmail-mcp/credentials.json.
4. Add to Kiro
{
"mcpServers": {
"gmail": {
"command": "npx",
"args": ["-y", "@gongrzhe/server-gmail-autoauth-mcp"]
}
}
}
Option B: mcp-gsuite (Multi-account, Gmail + Calendar)
Supports multiple Google accounts but requires pre-authorization before adding to Kiro.
mkdir -p ~/.config/mcp-gsuite/credentials
# Create accounts file
cat > ~/.config/mcp-gsuite/.accounts.json << 'EOF'
{
"accounts": [
{
"email": "your@gmail.com",
"account_type": "personal",
"extra_info": "Primary account"
}
]
}
EOF
# Create OAuth config
cat > ~/.config/mcp-gsuite/.gauth.json << 'EOF'
{
"web": {
"client_id": "YOUR_CLIENT_ID.apps.googleusercontent.com",
"client_secret": "YOUR_CLIENT_SECRET",
"redirect_uris": ["http://localhost:4100/code"],
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token"
}
}
EOF
# Pre-authorize (run once, complete browser auth)
uvx mcp-gsuite --accounts-file ~/.config/mcp-gsuite/.accounts.json --credentials-dir ~/.config/mcp-gsuite/credentials
Then add to Kiro:
{
"mcpServers": {
"gmail": {
"command": "uvx",
"args": [
"mcp-gsuite",
"--accounts-file", "~/.config/mcp-gsuite/.accounts.json",
"--credentials-dir", "~/.config/mcp-gsuite/credentials"
]
}
}
}
Cron/Scheduler MCP Setup
Use mcp-cron for scheduling shell commands and AI tasks.
{
"mcpServers": {
"scheduler": {
"command": "npx",
"args": ["-y", "mcp-cron", "--transport", "stdio", "--prevent-sleep"]
}
}
}
Tools Available
| Tool | Description |
|------|-------------|
| add_task | Add a shell command task with cron schedule |
| add_ai_task | Add an AI prompt task with cron schedule |
| list_tasks | List all scheduled tasks |
| run_task | Execute a task immediately |
| enable_task / disable_task | Toggle task |
| remove_task | Delete a task |
| get_task_result | View execution history |
Cron Expression Format
┌───────────── second (0-59, optional)
│ ┌───────────── minute (0-59)
│ │ ┌───────────── hour (0-23)
│ │ │ ┌───────────── day of month (1-31)
│ │ │ │ ┌───────────── month (1-12)
│ │ │ │ │ ┌───────────── day of week (0-6)
* * * * * *
Examples:
0 */5 * * * *— Every 5 minutes0 0 9 * * MON-FRI— Weekdays at 9 AM0 0 0 * * *— Daily at midnight
Troubleshooting
| Issue | Solution |
|-------|----------|
| Server timeout on health check | Server may need auth first (e.g., Gmail). Run auth separately. |
| redirect_uri_mismatch | Add the correct redirect URI in Google Cloud Console |
| Package not found (E404) | Check the exact npm package name |
| Port 3456 in use | lsof -ti:3456 \| xargs kill then restart |
Config File Locations
| Scope | Path |
|-------|------|
| Global (user) | ~/.kiro/settings/mcp.json |
| Workspace | <project>/.kiro/settings/mcp.json |
Workspace config overrides global. Agent config overrides both.
License
MIT