{
  "markdown": "# ⚡ Kael MCP Server\n\n**AI-native tools for agents** — use cheap compute for web, DNS, WHOIS, screenshots, extraction, and sandboxed code execution instead of spending model tokens on guesswork.\n\n> Kael is for tasks where an agent needs fresh external data, structured output, or real execution — not another paragraph of reasoning.\n\n## Why this exists\n\nLLMs are expensive at:\n- fetching and cleaning live web content\n- checking DNS / WHOIS / IP facts\n- extracting structured data from messy pages\n- executing code safely and reproducibly\n- producing screenshots or binary artifacts\n\nKael turns those jobs into **real tools with JSON output**.\n\n## Best fit\n\nUse Kael MCP when your agent needs:\n- **fresh data** from the web or internet infrastructure\n- **structured results** instead of prose\n- **deterministic execution** instead of model simulation\n- **lower token burn** on repetitive utility work\n- **small tool outputs** that are easier to feed back into a model\n\nDo **not** use Kael MCP when:\n- the task is pure reasoning or writing\n- the data is already in context\n- a local tool already solves the problem cheaper/faster\n- you need a full browser workflow with human-style interaction across many steps\n\n## Included tools\n\n### Web and content\n- `web_fetch` — URL → clean readable markdown/text\n- `web_search` — real-time search results\n- `html_extract` — HTML/page content → structured data\n- `screenshot` — webpage → PNG screenshot\n- `pdf_extract` — PDF → extracted text\n- `url_unshorten` — resolve shortened links safely\n\n### Internet and infrastructure\n- `dns_lookup` — A, AAAA, MX, TXT, NS, CNAME, SOA, SRV records\n- `whois` — domain registration data\n- `ip_geo` — IP geolocation and network info\n\n### Data and utility\n- `code_run` — execute JavaScript, Python, or Bash in a sandbox\n- `text_diff` — compare text versions\n- `json_query` — query/filter JSON data\n- `hash_text` — compute common hashes\n\n## Tool selection guide\n\n| Tool | Use when | Avoid when |\n|---|---|---|\n| `web_fetch` | You need readable page content for summarization or downstream extraction | You need pixel-perfect rendering or JS-heavy interaction |\n| `web_search` | You need fresh discovery across the web | You already know the exact URL |\n| `html_extract` | You need tables, lists, metadata, or page structure as data | Plain cleaned text is enough |\n| `screenshot` | You need visual verification, layout evidence, or image output | Text content alone is enough |\n| `dns_lookup` | You need factual DNS records now | Static knowledge is acceptable |\n| `whois` | You need domain ownership/registration details | DNS records alone answer the question |\n| `ip_geo` | You need IP location/ASN/ISP context | You only need DNS or hostname resolution |\n| `code_run` | You need actual execution, parsing, transformation, or calculation | The task is simple enough to do directly in-model |\n| `pdf_extract` | The source is a PDF and you need text back | The source is already HTML/text |\n| `url_unshorten` | You need to inspect where a short link resolves | You already trust and know the final URL |\n| `text_diff` | You need a concrete change set between two texts | You just need a summary |\n| `json_query` | You need to filter/reshape JSON before reasoning | The JSON is already tiny and easy to inspect |\n| `hash_text` | You need a deterministic fingerprint/checksum | Semantic comparison matters more than exact bytes |\n\n## Quick start\n\n### Server endpoints\n\nKael supports two MCP transports:\n\n| Transport | URL | Best for |\n|---|---|---|\n| SSE | `https://www.kael.ink/mcp/sse` | Broad client compatibility |\n| Streamable HTTP | `https://www.kael.ink/mcp/stream` | Newer clients, simpler connection model |\n\nUse SSE if your client doesn't specify a preference. Use streamable-http if your client supports the 2025-03-26+ MCP protocol version.\n\nHealth check:\n\n```text\nhttps://www.kael.ink/mcp/health\n```\n\n### Claude Desktop\n\nAdd this to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"kael-tools\": {\n      \"url\": \"https://www.kael.ink/mcp/sse\"\n    }\n  }\n}\n```\n\nOr use streamable-http if your Claude Desktop version supports it:\n\n```json\n{\n  \"mcpServers\": {\n    \"kael-tools\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://www.kael.ink/mcp/stream\"\n    }\n  }\n}\n```\n\n### Claude Code\n\nAdd Kael as a remote MCP server:\n\n```bash\nclaude mcp add kael-tools --transport sse https://www.kael.ink/mcp/sse\n```\n\nOr add to `.claude/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"kael-tools\": {\n      \"type\": \"sse\",\n      \"url\": \"https://www.kael.ink/mcp/sse\"\n    }\n  }\n}\n```\n\nGood first checks in Claude Code:\n1. connect Kael and confirm the server appears in MCP tool listings\n2. ask Claude to run `dns_lookup` for `example.com` MX records\n3. ask Claude to use `web_fetch` on a live page and summarize it\n\nExample evaluator prompt:\n\n> Use the `dns_lookup` tool from the Kael MCP server to get MX records for example.com, then use `web_fetch` on https://modelcontextprotocol.io and give me a short summary.\n\nWhy this is a good Claude Code test:\n- verifies Kael is reachable as a real MCP server\n- exercises both a factual infrastructure tool and a fresh-web retrieval tool\n- makes it obvious whether Claude is actually using tools instead of guessing\n\n**For deeper integration** — including `CLAUDE.md` instructions, hook examples for tool routing, and project-specific patterns — see [Claude Code Integration Guide](docs/claude-code-integration.md).\n\n### MCP Inspector\n\nUseful for quick validation before wiring Kael into a larger agent stack:\n\n```bash\nnpx @modelcontextprotocol/inspector\n```\n\nThen connect to:\n\n```text\nhttps://www.kael.ink/mcp/sse\n```\n\n### Other MCP-capable clients\n\nIf your runtime or editor lets you add a remote MCP server by URL, use one of:\n\n| Transport | URL |\n|---|---|\n| SSE | `https://www.kael.ink/mcp/sse` |\n| Streamable HTTP | `https://www.kael.ink/mcp/stream` |\n\nAdoption-friendly rule of thumb:\n- if the client asks for an MCP server URL, try the SSE endpoint first\n- if the client supports streamable-http (newer protocol), use the stream endpoint\n- if it wants a named server entry, use `kael-tools`\n- if it supports a quick test prompt after connecting, start with `dns_lookup` or `web_fetch`\n\nExample generic config shape (SSE):\n\n```json\n{\n  \"mcpServers\": {\n    \"kael-tools\": {\n      \"url\": \"https://www.kael.ink/mcp/sse\"\n    }\n  }\n}\n```\n\nExample generic config shape (streamable-http):\n\n```json\n{\n  \"mcpServers\": {\n    \"kael-tools\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://www.kael.ink/mcp/stream\"\n    }\n  }\n}\n```\n\nThis same pattern is typically what you want in MCP-capable editors and agent runtimes such as Cursor, Cline, OpenCode, and similar tools that accept remote MCP servers.\n\n### Generic MCP client (Node.js)\n\n#### SSE transport\n\n```javascript\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\n\nconst transport = new SSEClientTransport(\n  new URL(\"https://www.kael.ink/mcp/sse\")\n);\n\nconst client = new Client({ name: \"my-agent\", version: \"1.0.0\" });\nawait client.connect(transport);\n\nconst tools = await client.listTools();\nconsole.log(tools.tools.map(t => t.name));\n\nconst dns = await client.callTool({\n  name: \"dns_lookup\",\n  arguments: { domain: \"example.com\", type: \"MX\" }\n});\n\nconsole.log(dns.content);\n```\n\n#### Streamable HTTP transport\n\n```javascript\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\n\nconst transport = new StreamableHTTPClientTransport(\n  new URL(\"https://www.kael.ink/mcp/stream\")\n);\n\nconst client = new Client({ name: \"my-agent\", version: \"1.0.0\" });\nawait client.connect(transport);\n\nconst tools = await client.listTools();\nconsole.log(tools.tools.map(t => t.name));\n```\n\n### Quick connection test flow\n\nIf you are evaluating whether Kael is worth adding to your stack, use this order:\n\n1. Hit `https://www.kael.ink/mcp/health`\n2. Connect your MCP client to `https://www.kael.ink/mcp/sse` (or `https://www.kael.ink/mcp/stream` for streamable-http)\n3. List tools\n4. Run one factual tool like `dns_lookup` or `web_fetch`\n5. Only then wire it into a larger agent workflow\n\nThat keeps evaluation cheap and makes failures obvious early.\n\n## Example agent tasks\n\n### 1. Fetch a page for summarization\nAsk your model to use `web_fetch` when:\n- the page is live\n- raw HTML would waste tokens\n- you want readable markdown returned first\n\nExample prompt:\n> Fetch the pricing page with `web_fetch`, then summarize the plans and highlight any usage limits.\n\n### 2. Check a domain's email setup\nAsk your model to use `dns_lookup` when:\n- you need MX/TXT/SPF/DMARC facts\n- hallucinated infrastructure answers would be risky\n\nExample prompt:\n> Use `dns_lookup` to inspect MX and TXT records for example.com and tell me whether email appears configured.\n\n### 3. Turn a messy page into structured data\nAsk your model to use `html_extract` when:\n- the page contains tables, lists, or repeated blocks\n- you want JSON-like structure before reasoning\n\nExample prompt:\n> Load the page, extract the product table with `html_extract`, then compare the plans.\n\n### 4. Execute code instead of simulating it\nAsk your model to use `code_run` when:\n- exact calculation matters\n- a parser or transformation would be more reliable in code\n- the result should be reproducible\n\nExample prompt:\n> Use `code_run` in Python to normalize this CSV and return the cleaned JSON.\n\n## Example outputs evaluators can expect\n\nThese are abbreviated examples so builders can sanity-check the shape of Kael results before integrating it into an agent loop.\n\n### `dns_lookup`\n\n```json\n{\n  \"domain\": \"example.com\",\n  \"type\": \"MX\",\n  \"answers\": [\n    {\n      \"exchange\": \"mx.example.com\",\n      \"priority\": 10\n    }\n  ]\n}\n```\n\nUseful when you want:\n- machine-checkable infrastructure facts\n- small outputs that a model can quote directly\n- an easy first connectivity test after `listTools`\n\n### `web_fetch`\n\n```json\n{\n  \"url\": \"https://example.com/pricing\",\n  \"title\": \"Pricing\",\n  \"content\": \"# Pricing\\n\\nStarter ...\\nPro ...\",\n  \"contentType\": \"text/markdown\"\n}\n```\n\nUseful when you want:\n- readable page content instead of raw HTML\n- a compact artifact for summarization\n- a lower-token input for downstream reasoning\n\n### `html_extract`\n\n```json\n{\n  \"url\": \"https://example.com\",\n  \"headings\": [\"Overview\", \"Pricing\"],\n  \"links\": [\n    {\n      \"text\": \"Docs\",\n      \"href\": \"https://example.com/docs\"\n    }\n  ],\n  \"tables\": [\n    {\n      \"rows\": [\n        [\"Plan\", \"Price\"],\n        [\"Starter\", \"$9\"]\n      ]\n    }\n  ]\n}\n```\n\nUseful when you want:\n- page structure as data before reasoning\n- table/list extraction without custom scraping glue\n- cleaner agent pipelines: fetch/extract first, summarize second\n\n### `code_run`\n\n```json\n{\n  \"language\": \"python\",\n  \"stdout\": \"[{\\\"name\\\":\\\"alice\\\",\\\"score\\\":42}]\",\n  \"stderr\": \"\",\n  \"exitCode\": 0\n}\n```\n\nUseful when you want:\n- deterministic transforms or calculations\n- reproducible parser behavior\n- concrete execution evidence instead of simulated code reasoning\n\n## Copy-paste prompts for AI runtimes\n\nThese are short prompts you can drop into Claude, Cursor, or another MCP-capable agent to verify that Kael is wired correctly and useful for real work.\n\n### Fresh-web retrieval check\n> Use `web_search` to find the official homepage for Model Context Protocol, then use `web_fetch` on the best result and give me a 5-bullet summary.\n\nWhy this is a good test:\n- proves search + fetch both work\n- shows that Kael returns fresh external data instead of stale model memory\n- keeps the output small enough for a quick integration check\n\n### Minimal connection-verification prompt\n> List the tools available from the Kael MCP server, then run `dns_lookup` for example.com MX records and `web_fetch` on https://modelcontextprotocol.io. Return the raw tool findings first, then a short summary.\n\nWhy this is a good test:\n- confirms the client can see Kael's tool catalog\n- exercises both infrastructure lookup and live-page retrieval\n- makes it easier to tell whether the runtime is actually calling tools instead of improvising\n\n### DNS / infrastructure fact check\n> Use `dns_lookup` to get the MX and TXT records for example.com. Summarize what they imply about email setup and quote the exact records you found.\n\nWhy this is a good test:\n- verifies structured factual output\n- makes hallucinations obvious\n- matches a common real agent task\n\n### Structured extraction check\n> Fetch a page, then use `html_extract` to pull the main links, headings, and any tables into structured output before summarizing them.\n\nWhy this is a good test:\n- demonstrates that Kael is not only for plain-text retrieval\n- shows how to turn messy pages into data first, reasoning second\n\n### Execution-backed transformation check\n> Use `code_run` in Python to convert this CSV into normalized JSON, then return the JSON and a one-sentence description of what changed.\n\nWhy this is a good test:\n- confirms the agent can hand exact work to execution instead of pretending to run code\n- useful for evaluation by builders who care about reproducibility\n\n## What good tool use looks like\n\nA strong Kael-enabled agent flow usually looks like this:\n\n1. **discover or fetch** real external data\n2. **extract or transform** it into a smaller structured form\n3. **reason over the result** instead of over raw pages, HTML, or guessed facts\n4. **return compact evidence-backed output** to the user or downstream agent\n\nThat pattern is usually cheaper and more reliable than asking a model to reason directly over messy live inputs.\n\n## Direct REST API\n\nThe same capabilities are also exposed as REST endpoints under `https://www.kael.ink/api/`.\n\n```bash\n# IP geolocation\ncurl \"https://www.kael.ink/api/ip?ip=8.8.8.8\"\n\n# Screenshot a page\ncurl \"https://www.kael.ink/api/screenshot?url=https://example.com\"\n```\n\n## Why Kael\n\n1. **Built for agents** — structured outputs, not UI-first flows\n2. **Fresh external facts** — DNS, WHOIS, search, IP data, page content\n3. **Cheaper than token-heavy reasoning** — especially for fetch/extract/execute tasks\n4. **Standard MCP** — works with Claude and other MCP-compatible runtimes\n5. **Practical tool mix** — internet facts, content extraction, and sandboxed execution in one server\n\n## Endpoints and links\n\n- **MCP SSE:** `https://www.kael.ink/mcp/sse`\n- **MCP Streamable HTTP:** `https://www.kael.ink/mcp/stream`\n- **MCP health:** `https://www.kael.ink/mcp/health`\n- **Website:** https://www.kael.ink\n- **API docs:** https://www.kael.ink/docs\n- **Swagger:** https://www.kael.ink/swagger\n- **Status:** https://www.kael.ink/status\n\n## Positioning in one sentence\n\nKael gives AI agents cheap, structured, real-world capabilities so they can fetch, inspect, extract, and execute instead of wasting tokens pretending to.\n\n## License\n\nMIT\n\n## 🚀 Kael Platform\n\nThis MCP server is part of the **Kael Platform** — an AI-native task management system with:\n\n- **Tree-structured tasks** with drag-and-drop, progress tracking, and goal linking\n- **Goal management** with hierarchical objectives and success criteria\n- **Sandboxed script execution** via Docker containers\n- **Impact analysis engine** (zero LLM cost, pure code analysis)\n- **Docker Compose one-command deployment**\n\n👉 **[github.com/dreamingms/kael-platform](https://github.com/dreamingms/kael-platform)**\n\nTry it live: [kael.ink/tasks](https://www.kael.ink/tasks) | [kael.ink/goals](https://www.kael.ink/goals) | [kael.ink/dashboard](https://www.kael.ink/dashboard)\n",
  "bytes": 15632,
  "sha": "fa64857bf3abe2cd9bee3bb00bcdee24357431d360878df4e1179e8082e2a3ec",
  "repo_slug": "dreamingms/kael-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_dreamingms_kael_mcp_server_b2e05974/readme"
}