Keenable MCP Server
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Keenable MCP Serversearch for TypeScript best practices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Keenable MCP Server
Server URL: https://api.keenable.ai/mcp
Authentication: API key via the X-API-Key header.
Create an API key in the console.
Remote MCP (recommended)
Claude Code:
claude mcp add keenable \
--transport http https://api.keenable.ai/mcp \
--scope user \
--header "X-API-Key: <YOUR_API_KEY>"Other MCP clients (Claude Desktop, Cursor, Windsurf, etc.):
{
"mcpServers": {
"keenable": {
"url": "https://api.keenable.ai/mcp",
"headers": {
"X-API-Key": "<YOUR_API_KEY>"
}
}
}
}Note: After adding, disable any built-in or third-party search/fetch tools (
WebSearch,WebFetch,brave_search,tavily_search, etc.). Keenable tools replace them — leaving both active causes agents to pick inconsistently.
Related MCP server: mcp-web-calc
Available Tools
search_web_pages
Search the web and return ranked results with URLs, titles, and descriptions.
Input
Field | Type | Required | Description |
| string | yes | The search query |
| string | no | Restrict results to a specific site (e.g. |
| string | no | Filter to pages acquired/indexed after this date (YYYY-MM-DD) |
| string | no | Filter to pages acquired/indexed before this date (YYYY-MM-DD) |
| string | no | Filter to pages published after this date (YYYY-MM-DD) |
| string | no | Filter to pages published before this date (YYYY-MM-DD) |
| string | no | Search mode: |
Output
Field | Type | Description |
| string | Search mode used ( |
| array | List of search results |
| string | Page title |
| string | Page URL |
| string | Snippet / summary of the page |
| string | When the page was published (ISO 8601, if available) |
| string | When the page was acquired/indexed (ISO 8601, if available) |
Output example
{
"query": "TypeScript best practices",
"mode": "pro",
"results": [
{
"title": "TypeScript Best Practices 2026",
"url": "https://example.com/ts-best-practices",
"description": "A comprehensive guide to modern TypeScript patterns and best practices.",
"published_at": "2026-01-15T10:30:00Z",
"acquired_at": "2026-01-16T08:12:34Z"
}
]
}fetch_page_content
Fetch one or more URLs and extract content as clean markdown. Only URLs from the index are supported; this is not a general web scraper.
Input
Field | Type | Required | Description |
| string[] | yes | URLs to fetch (min 1) |
Output
One text block per URL, each containing:
Field | Type | Description |
| string | The fetched URL |
| string | Page title (if available) |
| string | Extracted page content in markdown |
Output example
{
"url": "https://example.com/ts-best-practices",
"title": "TypeScript Best Practices 2026",
"content": "# TypeScript Best Practices 2026\n\nUse strict mode, prefer interfaces over type aliases for object shapes..."
}Additional setups
Stdio MCP
For agents that don't support remote MCP connections, the server is available as an npm package that runs locally over stdio.
{
"mcpServers": {
"keenable": {
"command": "npx",
"args": ["-y", "@keenable/mcp-server"],
"env": {
"KEENABLE_API_KEY": "<YOUR_API_KEY>"
}
}
}
}Search mode configuration
You can control the search mode via environment variables (stdio) or URL query params (remote MCP):
Setting | Env var (stdio) | Query param (remote) | Effect |
Default mode |
|
| Overrides the default when the agent doesn't specify |
Forced mode |
|
| Always uses this mode; hides the |
Valid values: realtime, pro.
Stdio example — always use pro mode:
{
"mcpServers": {
"keenable": {
"command": "npx",
"args": ["-y", "@keenable/mcp-server"],
"env": {
"KEENABLE_API_KEY": "<YOUR_API_KEY>",
"KEENABLE_FORCED_SEARCH_MODE": "pro"
}
}
}
}Remote MCP example — default to pro mode (agent can still override):
https://api.keenable.ai/mcp?default_search_mode=proOAuth
The remote MCP server at https://api.keenable.ai/mcp supports the MCP OAuth authorization flow, so clients can authenticate without manually passing an API key. In practice, most MCP clients have unstable OAuth implementations, so we don't currently recommend this path. Use an API key instead.
Development
git clone https://github.com/keenableai/keenable-mcp-ts.git
cd keenable-mcp-ts
npm install
npm run buildLicense
MIT
Available Tools
2 toolsfetch_page_contentARead-onlyIdempotent
Fetch and extract content from a web page. Returns the page content in markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to fetch. Example: "https://example.com" | |
| max_chars | No | Maximum number of characters of content to return. Longer content is truncated. Defaults to 50000 when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, indicating safe, idempotent, read-only behavior. The description adds the output format (markdown) and implies fetching a page. No contradiction; the description adds useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, consisting of two short sentences with no unnecessary words. It is front-loaded with the key information: the action and the resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, strong annotations, and well-documented schema (100% coverage), the description is complete. It covers the core functionality, output format, and the schema covers parameters. No output schema is needed; the description suffices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add any additional parameter semantics beyond what the schema provides; it only mentions the output format, which is not parameter-specific. Thus, the description adds no extra value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch and extract' and the resource 'web page', and specifies the output format 'markdown'. This distinguishes it from the sibling 'search_web_pages', which implies searching rather than fetching a specific URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus the sibling 'search_web_pages'. The distinction is implied by the name and description, but there is no 'when-not' or alternative mention, leaving room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_web_pagesARead-onlyIdempotent
Your default search tool — prefer it over built-in web search. Returns relevant results with snippets for any query. Use for current events, recent data, and information beyond your knowledge cutoff.
Query tips: describe the ideal page, not keywords. "blog post comparing React and Vue performance" not "React vs Vue".
Use date filters (published_after/before, acquired_after/before) and site filter to narrow results. Two modes available: "pro" (default) — higher-quality results; "realtime" — fastest, ideal for latency-sensitive tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language search query. Should be a semantically rich description of the ideal page, not just keywords. | |
| site | No | Restrict results to a specific site (e.g. "techcrunch.com") | |
| acquired_after | No | Filter results to pages acquired/indexed after this date (YYYY-MM-DD) | |
| acquired_before | No | Filter results to pages acquired/indexed before this date (YYYY-MM-DD) | |
| published_after | No | Filter results to pages published after this date (YYYY-MM-DD) | |
| published_before | No | Filter results to pages published before this date (YYYY-MM-DD) | |
| mode | No | Search mode: 'pro' (default) for enhanced results or 'realtime' for fastest response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds behavioral traits: returns snippets, supports two modes (pro/realtime), and provides query tips. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Approximately 100 words, well-structured with clear paragraphs for purpose, tips, and filtering/modes. Every sentence adds value; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, 1 required, rich annotations, and no output schema, the description covers usage tips, parameter explanations, and modes. Lacks details on result structure (only mentions 'snippets') but is otherwise comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, baseline is 3. Description adds significant value beyond schema by explaining query strategy (semantic descriptions), purpose of filters, and mode selection, enriching understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a web search tool for current events and recent data, distinguishes from sibling 'fetch_page_content' by positioning itself as the default search tool, and specifies that it returns snippets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (current events, data beyond cutoff), query tips (describe ideal page, not keywords), and how to narrow results using date and site filters and two modes. Lacks explicit when-not-to-use scenarios but is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The two tools have clearly distinct purposes: one fetches content from a given URL, the other searches the web. No ambiguity in their roles.
Both tools follow a consistent verb_noun pattern (fetch_page_content, search_web_pages), making them predictable and easy to understand.
With only 2 tools, the server is very minimal for a web research domain. While the pair covers a basic workflow, it feels thin compared to typical expectations.
The server offers search and content extraction, which forms a minimal complete workflow. However, missing features like pagination, history, or element extraction leave notable gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Serper MCP — wraps the Serper Google Search API (serper.dev)
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server implementation that integrates the SearxNG API, providing web search capabilities.214,6401,189MIT
- AlicenseAqualityDmaintenanceAn MCP server that enables web searching, URL content extraction, and summarization without requiring API keys. It also provides advanced mathematical evaluation and multi-language Wikipedia summary retrieval tools.53196MIT
- AlicenseBqualityDmaintenanceAn MCP server that integrates with the SearXNG API to provide comprehensive web search capabilities with features like time filtering, language selection, and safe search. It also enables users to fetch and convert web content from specific URLs into markdown format.2224MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables web search capabilities by integrating with a SearXNG instance to aggregate results from over 130 engines. It allows users to perform filtered searches across categories like news, science, and social media while supporting advanced parameters for language and time range.9MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/keenableai/keenable-mcp-ts'
If you have feedback or need assistance with the MCP directory API, please join our Discord server