Repository navigation
feat(plugins): add Keenable web search MCP - #9316
KGKallasmaa wants to merge 4 commits into
Conversation
Add Keenable as a first-party-style Paradev plugin next to Exa/Firecrawl. MCP: https://api.keenable.ai/mcp (search_web_pages, fetch_page_content). Docs: https://docs.keenable.ai/mcp-server
|
I have read the CLA Document and I hereby sign the CLA 1 out of 2 committers have signed the CLA. |
|
I have read the CLA Document and I hereby sign the CLA |
|
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
[Low impact] The change adds one optional web-search plugin to the marketplace. Regenerate and commit the bundled manifests before merging so users can discover and install Keenable. Findings
Fix with agent prompt### Issue 1
.agent-marketplace.json:241-248
Keenable is registered here but missing from `packages/shared/src/plugins/manifests.generated.ts`. The API builds its available catalog from `FIRST_PARTY_MANIFESTS`, so Keenable stays hidden, and an account install returns `Unknown plugin "keenable"`. Regenerate and commit the bundled manifests through the plugin publish flow alongside this entry.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.SummaryAdds Keenable as a web-search and page-fetch plugin.
Reviews (1) · Last reviewed commit: "feat(plugins): add Keenable web search M..." · Reviewed by Greptile |
| "name": "keenable", | ||
| "description": "Search the web and fetch pages as clean markdown with Keenable, built for AI agents.", | ||
| "author": { | ||
| "name": "Paradev" | ||
| }, | ||
| "category": "data & apis", | ||
| "source": "./plugins/keenable", | ||
| "version": "1.0.0" |
There was a problem hiding this comment.
Keenable is registered here but missing from packages/shared/src/plugins/manifests.generated.ts. The API builds its available catalog from FIRST_PARTY_MANIFESTS, so Keenable stays hidden, and an account install returns Unknown plugin "keenable". Regenerate and commit the bundled manifests through the plugin publish flow alongside this entry.
Knowledge Base Used: Connector and plugin lifecycle
Prompt To Fix With AI
This is a comment left during a code review.
Path: .agent-marketplace.json
Line: 241-248
Comment:
**Keenable cannot be installed**
Keenable is registered here but missing from `packages/shared/src/plugins/manifests.generated.ts`. The API builds its available catalog from `FIRST_PARTY_MANIFESTS`, so Keenable stays hidden, and an account install returns `Unknown plugin "keenable"`. Regenerate and commit the bundled manifests through the plugin publish flow alongside this entry.
**Knowledge Base Used:** [Connector and plugin lifecycle](https://app.greptile.com/-/switch-tenant?tenant=personal-org-6810&next=%2Fcustom-context%2Fknowledge-base%2Fparadevai%2Fparadev%2F-%2Fdocs%2Fconnector-and-plugin-lifecycle.md)
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.There was a problem hiding this comment.
All reported issues were addressed across 2 files
Architecture diagram
sequenceDiagram
participant M as Marketplace Registry
participant P as Plugin Installer
participant A as Agent Runtime
participant K as Keenable MCP API
Note over M,K: Keenable Web Search Plugin Architecture
M->>M: Load .agent-marketplace.json
M->>M: Index plugin entry "keenable" under Data & APIs
M-->>P: Plugin metadata (name, category, source path)
P->>P: Read plugins/keenable/plugin.json
P->>P: Parse MCP config (streamable-http, api.keenable.ai/mcp)
P->>A: Register tools: search_web_pages, fetch_page_content
A->>A: Agent initiates web search request
A->>K: JSON-RPC over streamable-http: search_web_pages(query)
K-->>A: Search results (pages, snippets)
A->>K: fetch_page_content(url)
K-->>A: Clean markdown content
A-->>A: Process results for agent answer
Note over A,K: External boundary: Keenable manages API key/auth via MCP connection
Reply with feedback, questions, or to request a fix.
View guided diff | Re-trigger cubic
Regenerate packages/shared/src/plugins/manifests.generated.ts via the plugin publish flow so FIRST_PARTY_MANIFESTS includes Keenable.
|
Regenerated |
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Require per-user Keenable API keys via keenable_mcp (X-API-Key bind), so Paradev proxy traffic is not shared on the anonymous IP quota.
|
Addressed the P2 on anonymous quota: Keenable now requires a per-user API key.
Users create a key at https://app.keenable.ai/console. |
* chore: seed CLA signature file * @tanxarx has signed the CLA in #8881 * @ozeitis has signed the CLA in #8888 * @shubhankiit has signed the CLA in #8894 * @chrisfentiman has signed the CLA in #8910 * @RohithReddy20 has signed the CLA in #8907 * @larcane97 has signed the CLA in #8922 * @moizghumann has signed the CLA in #8935 * @andyst-dev has signed the CLA in #7930 * @svenpeeters has signed the CLA in #8943 * @kenil-kanani has signed the CLA in #8940 * @akshatcoder-hash has signed the CLA in #8963 * @NilotpalK has signed the CLA in #8995 * @serhii-kucherenko has signed the CLA in #9000 * @tonydzi has signed the CLA in #9002 * @adaam2 has signed the CLA in #9038 * @tsavo-at-pieces has signed the CLA in #9059 * @ganeshmshetty has signed the CLA in #9130 * @aaronrosenthal has signed the CLA in #9135 * @alexnault has signed the CLA in #9138 * @kunalgoesbyken has signed the CLA in #9235 * @Joaco-gavernet has signed the CLA in #9236 * @theblondealex has signed the CLA in #8240 * @talarczykco has signed the CLA in #7274 * @throw99 has signed the CLA in #7906 * @lacherogwu has signed the CLA in #9310 * @KGKallasmaa has signed the CLA in #9316 * @Niltonsf has signed the CLA in #9331 * @Anmol1578 has signed the CLA in #9351 * @RyoKusnadi has signed the CLA in #9317 * @thedotmack has signed the CLA in #9414 * @abudker has signed the CLA in #9439 * @sanchitmonga22 has signed the CLA in #9443 * @Bruno-rose has signed the CLA in #9446 * @Ashad001 has signed the CLA in #9487 * @vivek-pothina has signed the CLA in #8359 * @colingreig has signed the CLA in #9489 * @anmol0b has signed the CLA in #9492 * @resteqs has signed the CLA in #9506 * @pgilmore has signed the CLA in #7878 * fix(desktop): name the DMG from the display name The DMG file and its volume title now use DESKTOP_DISPLAY_NAME, so a Paradev build ships Paradev-<version>-<arch>.dmg. Unset, names stay Superset. The release keeps the Superset-<arch>.dmg alias beside the new one, since the README, docs and download button link to it. The .app bundle and the -mac.zip update files keep the Superset name. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
Summary
Adds Keenable as a Paradev plugin so agents can search the web and fetch pages as clean markdown via Keenable's MCP.
Mirrors the existing Exa plugin shape (
streamable-httpMCP, Data & APIs category).https://api.keenable.ai/mcpsearch_web_pages,fetch_page_contentChanges
plugins/keenable/plugin.json.agent-marketplace.json(register after Firecrawl)Disclosure
I work with the Keenable team. Happy to adjust naming, OAuth/connector wiring (e.g. Firecrawl-style
mcp-oauth), or icon if maintainers prefer.Test plan
https://api.keenable.ai/mcpAllow edits from maintainers. Will sign CLA as required.
Summary by cubic
Adds Keenable as a marketplace plugin so agents can search the web and fetch pages as clean markdown via Keenable's MCP, mirroring the existing Exa/Firecrawl plugin shape.
plugins/keenable/plugin.jsonwith astreamable-httpMCP connection tohttps://api.keenable.ai/mcp, exposingsearch_web_pagesandfetch_page_contentunder Data & APIs.keenable_mcpconnector requiring per-user Keenable API keys (bound viaX-API-Key) so traffic isn't shared on the anonymous IP quota..agent-marketplace.json(version 1.0.1) and regeneratesmanifests.generated.tssoFIRST_PARTY_MANIFESTSincludes Keenable.featuredarray and connector scopes, and drops the trailing newline; diff noise only, no behavior change.Written for commit d495287. Summary will update on new commits.
Summary by CodeRabbit