diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 74bf22bdd..5e3f6a0c1 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -682,6 +682,11 @@ "grokbot": "0.49.0", "sand": "0.49.0" } + }, + { + "name": "keenable", + "source": "third_party/keenable", + "description": "Search the web and fetch pages as clean markdown." } ] } diff --git a/README.md b/README.md index bec1cbfd3..bda4e38f2 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `rippling` | [Rippling](third_party/rippling/) | Cursor | Integrations | Look up people, time off, and company policy in Rippling, and file time-off requests and draft hires. | | `onepay` | [OnePay](third_party/onepay/) | Cursor | Integrations | Access your OnePay accounts: balances, transactions, credit, Pay Later, investments, crypto, and rewards. | | `questrade` | [Questrade](third_party/questrade/) | Cursor | Integrations | Read your Questrade portfolio, get live market data, and discuss potential trades. | +| `keenable` | [Keenable](third_party/keenable/) | Cursor | Integrations | Search the web and fetch pages as clean markdown. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/keenable/.cursor-plugin/plugin.json b/third_party/keenable/.cursor-plugin/plugin.json new file mode 100644 index 000000000..6602b9e39 --- /dev/null +++ b/third_party/keenable/.cursor-plugin/plugin.json @@ -0,0 +1,33 @@ +{ + "name": "keenable", + "displayName": "Keenable", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Search the web and fetch pages as clean markdown.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://docs.keenable.ai/mcp-server", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "keenable", + "search", + "web search", + "fetch", + "research", + "mcp" + ], + "category": "integrations", + "tags": [ + "keenable", + "search", + "research", + "mcp" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/keenable/CHANGELOG.md b/third_party/keenable/CHANGELOG.md new file mode 100644 index 000000000..fb9aee80a --- /dev/null +++ b/third_party/keenable/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `keenable` MCP server pointing at Keenable's hosted Streamable HTTP endpoint (`https://api.keenable.ai/mcp`). +- No API key: the server answers on the shared public tier, matching Keenable's one-click Cursor install. +- Logo: Keenable's official mark, from the `keenableai/keenable-mcp` repository. diff --git a/third_party/keenable/LICENSE b/third_party/keenable/LICENSE new file mode 100644 index 000000000..ca2bba771 --- /dev/null +++ b/third_party/keenable/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Cursor + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/keenable/README.md b/third_party/keenable/README.md new file mode 100644 index 000000000..a70290daa --- /dev/null +++ b/third_party/keenable/README.md @@ -0,0 +1,56 @@ +# Keenable + +Cursor plugin that connects agents to [Keenable](https://keenable.ai) through Keenable's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Search the web and fetch pages as clean markdown. No signup or API key is required. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Keenable**. +3. Click **Install**. + +Or run `/add-plugin keenable` in chat. + +## MCP + +```json +{ + "mcpServers": { + "keenable": { + "type": "http", + "url": "https://api.keenable.ai/mcp" + } + } +} +``` + +This matches Keenable's one-click Cursor install: the hosted Streamable HTTP server at `https://api.keenable.ai/mcp`, with no headers. The server answers on the shared public tier. An optional `X-API-Key` header (`keen_…`) removes the hourly request cap and attributes usage to a Keenable account; this plugin does not send one. + +## What agents can do + +| Tool | Capabilities | +| --- | --- | +| `search_web_pages` | Ranked results with titles, URLs, and snippets. Filter by site, publish date, or index time. `pro` (default) or `realtime`. | +| `fetch_page_content` | Read a URL as clean markdown. `live` fetches the source directly, including URLs that are not in the index. An optional `prompt` returns only the extracted answer. | + +The hosted runtime is the source of truth for tool names and schemas. + +## Notes + +- Unauthenticated calls are limited to 1,000 requests per hour and 10 requests per second per IP. A key removes the hourly cap; authenticated calls are 10 requests per second per organization and draw on that account's monthly allowance. +- `fetch_page_content` returns Keenable's indexed copy unless `live` is true. It is not a general scraper by default. +- Search snippets are usually enough. Fetch a page when the snippet is short, the user names a URL, or the answer needs exact wording. + +## Docs + +- Keenable MCP: https://docs.keenable.ai/mcp-server +- Authentication: https://docs.keenable.ai/authentication +- Rate limits: https://docs.keenable.ai/rate-limits +- Server URL: https://api.keenable.ai/mcp + +Logo is Keenable's official mark, from https://github.com/keenableai/keenable-mcp (`assets/logo.png`). + +## License + +MIT diff --git a/third_party/keenable/assets/logo.png b/third_party/keenable/assets/logo.png new file mode 100644 index 000000000..900a88557 Binary files /dev/null and b/third_party/keenable/assets/logo.png differ diff --git a/third_party/keenable/mcp.json b/third_party/keenable/mcp.json new file mode 100644 index 000000000..79fdf902f --- /dev/null +++ b/third_party/keenable/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "keenable": { + "type": "http", + "url": "https://api.keenable.ai/mcp" + } + } +}