apple-notes
Manage Apple Notes via the memo CLI on macOS (create, view, search, edit).
Built-in MCP (Model Context Protocol) client that connects to external
$ npx -y skills add graniet/kheish --skill native-mcp --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/native-mcpContext preview
The summary Claude sees to decide when to auto-load this skill.
Built-in MCP (Model Context Protocol) client that connects to external
description: Built-in MCP (Model Context Protocol) client that connects to external
MCP servers, discovers their tools, and registers them as native Kheish tools.
Supports stdio and HTTP transports with automatic reconnection, security filtering,
and zero-config tool injection.
version: 1.0.0
license: MIT
metadata:
catalog:
tags:
- MCP
- Tools
- Integrations
related_skills:
- mcporterThis skill is repo-local and stays inactive until explicitly activated.
When the original instructions refer to legacy tool names, use these Kheish mappings:
When the instructions mention local helper files, resolve them from `${KHEISH_SKILL_DIR}`.
Kheish has a built-in MCP client in the daemon. It connects to MCP servers at daemon startup, discovers their tools, and surfaces them as first-class runtime tools when the current session is allowed to see them.
Use this whenever you want to:
For ad-hoc, one-off MCP tool calls from the terminal without configuring anything, see the `mcporter` skill instead.
Install the MCP SDK:
pip install mcp # or, if using uv: uv pip install mcp
Create an MCP config file for the daemon:
[mcp_servers.time] command = "uvx" args = ["mcp-server-time"]
Start the daemon with that config:
kheish-daemon serve --mcp-config ./mcp-config.toml
On startup the daemon will: 1. Connect to the server 2. Discover available tools 3. Register them with the prefix `mcp__time__*` 4. Expose them to sessions whose effective capability scope allows them
Verify the result with:
kheish-daemon runtime get
Each entry under `mcp_servers` is a server name mapped to its config. There are two transport types: **stdio** (command-based) and **HTTP** (url-based).
mcp_servers:
server_name:
command: "npx" # (required) executable to run
args: ["-y", "pkg-name"] # (optional) command arguments, default: []
env: # (optional) environment variables for the subprocess
SOME_API_KEY: "value"
timeout: 120 # (optional) per-tool-call timeout in seconds, default: 120
connect_timeout: 60 # (optional) initial connection timeout in seconds, default: 60mcp_servers:
server_name:
url: "https://my-server.example.com/mcp" # (required) server URL
headers: # (optional) HTTP headers
Authorization: "Bearer <api_token>"
timeout: 180 # (optional) per-tool-call timeout in seconds, default: 120
connect_timeout: 60 # (optional) initial connection timeout in seconds, default: 60| Option | Type | Default | Description | |-------------------|--------|---------|---------------------------------------------------| | `command` | string | -- | Executable to run (stdio transport, required) | | `args` | list | `[]` | Arguments passed to the command | | `env` | dict | `{}` | Extra environment variables for the subprocess | | `url` | string | -- | Server URL (HTTP transport, required) | | `headers` | dict | `{}` | HTTP headers sent with every request | | `timeout` | int | `120` | Per-tool-call timeout in seconds | | `connect_timeout` | int | `60` | Timeout for initial connection and discovery |
Note: A server config must have either `command` (stdio) or `url` (HTTP), not both.
When Kheish starts, `discover_mcp_tools()` is called during tool initialization:
1. Reads `mcp_servers` from `~/.kheish/config.yaml` 2. For each server, spawns a connection in a dedicated background event loop 3. Initializes the MCP session and calls `list_tools()` to discover available tools 4. Registers each tool in the Kheish tool registry
MCP tools are registered with the naming pattern:
mcp_{server_name}_{tool_name}Hyphens and dots in names are replaced with underscores for LLM API compatibility.
Examples:
After discovery, MCP tools are made available to Kheish runtime profiles, but the effective session/persona capability scope can still filter individual servers or tools. Do not assume every conversation sees the full MCP surface.
Manage Apple Notes via the memo CLI on macOS (create, view, search, edit).
Manage Apple Reminders via remindctl CLI (list, add, complete, delete).
Track Apple devices and AirTags via FindMy.app on macOS using AppleScript
Send and receive iMessages/SMS via the imsg CLI on macOS.
Delegate coding tasks to Claude Code (Anthropic's CLI agent). Use for
--- description: Delegate coding tasks to OpenAI Codex CLI agent. Use for building features, refactoring, PR reviews, and batch…