From 26d2ff12033715cbd1b8f01c58afa13a09e3c326 Mon Sep 17 00:00:00 2001 From: Karl-Gustav Kallasmaa <29797627+KGKallasmaa@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:53:55 +0100 Subject: [PATCH] Add the Keenable MCP as a third-party plugin. Agents can search the web and fetch pages as markdown on the Keenable public tier, with no API key. --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + .../keenable/.cursor-plugin/plugin.json | 33 +++++++++++ third_party/keenable/CHANGELOG.md | 9 +++ third_party/keenable/LICENSE | 21 +++++++ third_party/keenable/README.md | 56 ++++++++++++++++++ third_party/keenable/assets/logo.png | Bin 0 -> 10974 bytes third_party/keenable/mcp.json | 8 +++ 8 files changed, 133 insertions(+) create mode 100644 third_party/keenable/.cursor-plugin/plugin.json create mode 100644 third_party/keenable/CHANGELOG.md create mode 100644 third_party/keenable/LICENSE create mode 100644 third_party/keenable/README.md create mode 100644 third_party/keenable/assets/logo.png create mode 100644 third_party/keenable/mcp.json 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 0000000000000000000000000000000000000000..900a88557d304e19e9095ee4251e331e05e14cd8 GIT binary patch literal 10974 zcmd6Ni94I!)_(A!rD%1~nmZ`1q9rJ5rlnexnk9-FV=O^JjP0wcrnaPJHI)Ww%_4>l zh9YK3(V*stISG{rzx15%eBXKhgI})expHMad#!cvwbrwB{0N#^-E;c|`&RGCJ5@2kg`!FnLjd--t+Nz~% z3u=%Pq_T8(tu%HfdhzY!elNA3$?eTMy==x7L!*kymKGFY+o>l#_hfMpQ!i65{v&5E zWW6YtDbu-n;kjbmv3N@Jz|@lYrP!RHsa+;Q2OYawgrBD{7^25kTD*0Xn^RX51xpIS0cys3)k#d zT)P%lq=%{wKja(a`|fR^A&6ywb#cXgN4s!L^$MskD2JfjPgX%L2QJYHO{mExz-cK9 zjp{)uI044|3gi2Ja2O6+!^%HNpkt~r8ff1fOEIz2nOwfVdL{_z51)XSG|*0JXzeBg zeNZ9No{rGfAbUibh$V+4hzBP4LBTfaXx?0#S;4g>xOWh_6tFF;sT(e~Ajlk)!d%qI zl+GIKj{%K`A?C4QXo7ffLL^C$)*CrC3gII!%BqaHwej?*w=NV$rI-Lq*;UV^SLHX! zsa}Z+0c-cl%Y$S)Vcf>u?tb%WpH z&z15@M`O)ur-X#tH__v4qdMX8*C;szBjobLYUw4!!yVU3cVeH;SvZ88apwqWF3!fW z@G?c$f!P;`xO)hnwGn z>D3gvac___gUu^Hv!5J^Tm};KC+$NY4AN0WvLs35G7oZ@2B7zAfh`@x*YcL(UY2Be z_N(OJO442RPAPh&39uug{aG$m=toUI8S7Io;HV-ZpB9?n7YbHlUoJ`=Sr*hxW2*mh z|Leiwu#tz16y~#3mUw&n3niSwqJrGdj^aIJ=a5{@$`|-Au_au$3LeB0fuUwr5FR0y z*8p7RQ?FW2Y29GRpGOaSRpJz0zULgAf-&5-Qz`T_N*pILf17PBLMI+y^-7BF+xUUcB zMt5R0e?WrxqZvc!tleA9B~u9{`+-iA>6DV1nAORr6>yQh@8Sxbn~7&)?h0kiCEpNm zYH?Z-u64$d-@}C0W!Y-kydWZBEgOQlrx!F-&KkF=8F}n&mR&WI&LfSx#Dd8-Es?|N zTv;}?bqCqTZquJ~KWhk9*gE-U$SLP~-iT9Zkk0=;{$||!-k}`X)&Mak=zM;bU3k?a_^MV8Ai7-LiS?s}J z73c3PZAnD$zW;e^iCXYCMq1%|_8_+ZcpQ4!cW}S3HWan;9vRXT5?QMiBB&?wGSp2B zTo-g&uMp$oS~M6!y?DO%Gsk#R$9wH{Y_VI>HS(O)uUcKp`T%da%UP1SCKEM<^)4F}TSP+4OwFv2)KQR$4 zEaT31t>4|d#AHHJkTl$fa}ukWC}#pL)Uqk3F0yWJz`D6gzsOK2;3|tr z^_~&489vDQroRBS?ahfK>z!wf*5UJPQt_P9_l%~M3rZkOTORYtn%d{omc^X)ZYRSD zPGV|l4kqty;UHJ=@u&YXRBR=bcISTmIh{mm$-_eFvyI0by`zPnS94*fy6aPPl3>st ze8DGqfS!ms$EeP5Rbn^yc-8x|v_-z~(i;Ki8hu4S=4_Vbe)MklK#7X>Di=>+`9r`p zIE|b^u2Fz;>O<;<>hAQ>xJ0A6HxFG##JS|8{k$c+lm{EXble)^PcWV9eL|VN%mQzo zUGi(-7yQ8$@X{Z{EM@aD;Z00xq7g$ud|GM4=wA?`@AKvK8Wyh!r6`^IH&&SdKA@XM zS>YH<#J+s%-=m;>z@}HGv%=LMhC4d5oG#ggioWA3WAm1LGj6BZ^gM#zQ6ybc*_W8k zLaFmsc2B&=@Uh`t_2-E995N68n0SY8zeaEXH9fx;wY5Bpb^mKn_ul~vfV4wiQ6~OQ z>~2#KpR5Um0iGFqa(GK-2!~Bc*&`E;T2w+3zybyOJegx6Krad#+^;QBdH*R2NR1Em z{Ouo4%ItC)>W#`TAat4HC+FUK4|4|rFXF@5++CbQP5DY1sV_!EB|{JW38`%afoUr8Ea}#t&(8Q zg;V#)uCu`VV0)$4r4Vnrzd~D4f*0=Rjk^O*A#JxK7`OQt6K=vg9UETr6VfYCaVJzA zGcX@z6JO}hMU&xZxh&mWs!U(T5&H?7F`btlO&wc)wE^>G{28j!Yt7ZR8v@~#BTaU=Ydp?A>e>54 z3lk}ISte8?0G}8XuWfwTxN{@P)3LCl=TmtNuqL=N&#|&%w{r5@I6+3M?v|J4eH+$DvU%A@(3RtmPeDJUx}SJO|U;1pQg?Tkt@ z!t=ll65r{cg}1#@cvl%0V}Wb%*1R0Wk%RF3ROU7s{!ZWjK3_rG!v&x^8r`@owao@} z2imbh6RC0UVg1kRt5sgT3f*j zPwbeC-GKwdOnVGw9YdyWeieYM{`f>+E?O+fI3u4CqB-5_uLmwIJu>pd!F6S{9KM+8 z5zJU?fD9Jss_*^`q7gSDZJ2c0$WiH>0&z|F<3lxO1EpWX4Cxfv25-^Y(Nn^+BM;{_$(2_Pu2 zzbi9XY)7IHc`AHk?7!+1>O1Ye}T@(Ctd%05l;SB1oh+j$3AmQIF9Hx|2h$xxoc@;cX-K5?=v{v zEK||YBM(;k>)D)k%~*_3&)#i{eL#9IxvEVaGeaG$ukz$YR=TL~3}yRA6*QcVIj7{l zJZfoHxu5+QdH!NBY6Lv4}ou2V~*5>_&7o-MvFl`BXg-YxW1qERJcnh3kd+ia* ze%r_HTmJ=)+*|PB@m=Hg@~A}Y_bwt%-&MJJ#o@1y*N5+vc;qAM_nx`9jl&OXD8VN( z7lmuz@!mEjh6T1p+^HPDGgsO-8vddkr#f9B55l}9{^Gn|7Tf(dv&5@uLfmIzDr}BV z3^t#(DD>Q_Y6N?$e_MDpHf=eO!gcf-DqVRGSDsbSuB@!=W*Jn;wa}m2?43k!=wrw} ztr%;t-M9sYlS)FO0JdZw=p#S(qw>dG?fnZcvU|Rq$+!&ji|v$&-J=OP2E>q}e-<*# z{^$iS%P|pH9@ifqopoC`Y}0*q>QFdxht*}(asLNonhSvMgvFxvP5XhXv59vums1yX zewO!w?OT@O@l3ZoOf?nhc{#LUdM-uVZ>O==VtjdX5=Sm&w_CkCF}2QaVXYQ@`^Z(~ z&yxp2izHW6@Ckjg?%Q72j&JvX_(SJgjMbV6#4ZsBK@&+o4as7ZH?XyblBz!(Z>@}d zh9&V9u*H6l6e2qt&Iq;rezpf-`JP%Cgw(_G?UsHxm0j;l5_yl<8SldGTum2iUOjop zXb#TadZp#W;5{N@$h>pMhbqQI47tde&kUEGuiyq};rLrSBR9`3@p_bBFEz`risM)B z#;#w@72COKkD_IrWEjp1Cx%ME!1`@tN>wgzt26><4c6)i;Kew3#O}~L!aYi4O+U6vzoFT5x>UI*u@XId?~+Q!|vB9*^F+pZ#x2_0*;d+%f%o3 zCEr4|py+0}FM&b`E1FZP8>+pcyC$bQ-`;R7%nz))I_`z^v!8P~*#|-4wz5Fk%#oI4 z#Y0z)@Ae4V%AG`@LrnNWx=rl4Zw?VOMHckF%hK;fo|GRSPU;%gyj20IvL5#vp#M;1 zZ2%K_yItA#-|cMK1Go8F%8qaaqQNbF+%_4k1t#g_)Ta%NuN#_q*=1iE=aMy6Ayu7w ztDkK$33eLWSwSCAiycKLAz)?IonLWtVZrI^=X^EGGTbK-W;NoHr6gD-&qdG}Y#Onv zjBc{`STY6G;H(E?J!oTI~Bi#vSMT{c`*P9=kYk3N0l+BqSTfW*l6yjZc;9R1W4zF0@-+^-ex&A4}LMxZ8% zaA$66q|x?FMUA*Yul(Led(uV5ff76rTr4#)B7$5eHfIwYkBrl!gIqKR?)UWXo&Nf2 z&F-r>-I8gQc9TgR!Ep}``wTHH7`o1H=qM|hukiw^=!Sq{JF=*%IzG{e)2UP%^L1Z9 z(G*m;>(OU- zos>(61sq6@P+PR}oFp2i;HbTJyR5ZlF^{QGYqdFnt8b_au!?L0E2Vrj_;Z+C{dtNk z#SKFsvF+a|EjOWlUfs*8GNO_R0}+GQaGmi)m#L^Tb~R?7O4mxoBY!(n;Jh~`H})!R zqn=Sw-#F)=0S=CjTq1OA4L$N6Dm483lXLwi%m%uwM#LUoQ=HkonvU6Bt&|n@LF7jx zoYAjfpn6jFakShdh3xuqPr^B;2>pDCcxNRGQguV(nn}&UP)g=*zF`lcJfPGx*Bk8r z&Lh_~Ulom0nSZn6s58Y%+s8ygVZsOyd_ryEjb$Hq&#*wbwJfe-LqBdqtCXv)`~Cu- znEEIS<^Z0NFE*#PIaCk26&6t<)+*6uv(&4;-F*?qeK$?QX$|xd-H)WR_8}hNpm!ci z{mtIAJc(~1Y<6#O-+aHKQ}W+RU<1Vu;%{HMK$=YeHHRom$avuo=}vu&feT-|KBRK- zi+X~CZaf~*uTn)1sT7Ag$V)z(qD0`d;L5~)yAzq$on!X^#x)fAX0JMMP#@zXes8t> zYQ>W#A8_c6`L+;kVC$6@aFidhqX-$IsO>pNW!}GK8HyBE_I~q6aZT&}TUI#w>Ds69 zzv3nQz@eWW=l;%6&D@|va;@5;FR4pM$JO`EhH5O&}&$`&UuhX)KC_noX{TE}F4{YcZ* zT5~OM(s`!|nvUAECz$o#xqu4UDkDsco1I~BsPww+k^&8vcP9N+B}AQmGLKLWYP#zl zSl?U72-x`9R0CVCupw~^O#S(xUE@b#vyh({5n z(N6ius7iJxt*mE?h+7#x(`&XAj4u=muk7J`T)P(|yjYt(myM_!y_j;#MdP}9=!1B0 z&7Zh89deTM8f>VVgBo?}xpnZA^2NHz4`EEd1)&u1M6H`8^fd7P-1}vyq4&4vCraa7 znl;01cb#xG{RzYSvA)7IV}7mQGXT?`K)0{xX$ZKj@&&;`wk6R3&3MjvX50UJA^WgU!&aC^B8w$POjg553otl8V38m^OI8_s#!S9{O z)(o#FMa#@?OT~$QT&G>nfh}e(O3(kO)^G67BKV``pg((9RdsMM_aYu>kXEx_fO2JC z`eXlgix+XuxpBKkmSumagd)Esw>PKk$!Q}nriMPZ$nA+N{jNmKxPZKr@cq$m3j#+4 zt0?yR8cGb4@S5U(GuE324xWlSUXARoZre@!E|Ncs(jfY$GV?>axIsZQCu&Xqx*LHHIi zJYhL}qorZ*s9L?x>A6JeD@?>NBSjV`(082~C9<(A(Mz9+6S$X=Zo47!7567Sj187r z1{(+0+x%45-Vmqc05sKr85VQ!={9VJQ?oMXChOG#qILYmZ+2#-Kt;IvHPz{enm-O! zf4DhO)cv5?gWcES&i7TcuQzkqDMDIHWu&?IgddLRejJex?`$wO)uUA3!ZUc`gXO_#{|SMkT1Ti5~l3Cte(AV-wcG<{5eYU;Gc7x6X+= z-6C?;*hrU6JXgSfq>>3`d~nZ6s*q9KUd-`-yJj=Qb1_OJPDE-)bNrj0Gv_ci@HMwc zp`O5(EOP6yc%wfUPg#kC<)&$Up{M^tRohfSvVk)|@_+nFCips~8l=3HIPyQ>%pdyB z(3+|2+ZF#%+btGK{lq5vpHW7I-f_~yp^_&#ZXW*^H^w663`V&~7qH`5m+}9H!A|6* znS$g7_kZ~-4tYqbc)2#mFgYQ&2NHS@K_bxinPw`3uX^=s&FM(y2XC z@X7uEn2NptiOVD@q^h$2V?yAK5}{Ni?jP0(4}uf&l>ULfj%DBSpV1j&8SDD*=!|ih z)ktFy(*I85DQA&m_Z1{TXp90%Ydf&-WbG z_U+YHKl#wHaKzCrzHw^eGtH)J@%8c9^yLh|i^QjRF7Sp1Iy;vT>SzpNog-BgMCPez zTMN2~ybMf`4^2qM`2kZc!9rZ-K9_P5J0%pr8 z2J~CKt((tTrH%_q@aq;gX4<0aFp+}H)C1Yyoq8n0B3-Alp1q?n z2}FB(orj?}w_4hAKHI6wNli zQz(k>{cA65q{UcQZg+XGRs)pn^-k?)7v!?z>j||7`M(U|RGLO_dhknQrX)A^Kvd_% z>-xISK$~IRP8vm#DdfvchPKqc_F_u1&J{V$yNi8CWE(!oODsVzGKJijQwu9~dC)z{ z5R#}r!{u@%Bu+Z^+&*}^^so>$?bP74C;Uh)0q+Y-_5+PRwwjR4RTmjn6if(tw{hVE z2>rRgydUF}DxGjUTS&z&UFElHK=_s7(CP&D;iwa%0T{27=7ACBXZ8Jfc0TE2OkW`w zsp(F)`fKD*&ZiTckF^(==?FBf+Y_JlkVpTVLH(W$%!MXM4rB>+W`C7Dwtb1}cwM2- z=F(6ITkXlc`NS^fX(ywTw)|w_XQAxdSu?`5hNs3>XdhtVX(@yO8G;kp7RmKOa_Gvj z_V$ot_jZ3iH!PIxn|yiALHo6%ldn7IjLeH_tuDZ^l}n?9j;GL1Eb5|IqyvG&TrvmV z`uoVjUjf;P_c6!w2|kqii(btAZj7k8K|*9d0H}SmB~Q-c>_v2VxdbIU((o!5lMxh;usKhBIzoUEhiV^{v#!Q0UL;H=3h!TtMtH znBYp$$>y@c#Wha}kX$c$9WYV-9CrCfI*+*|IG6qGu?`ck3T;chA1jxL?5HXxRy2!y zF0$x^xI!bCq-qJWzw<8D8Q^PQyg!VYjESPqby>G=2JKKncHge6IuolpzKaqpvmHX! zHvLKWl7nxjGG}D;{BR&rI#dU+X8*>~g-C4Q#)|Vk;v~oT002Bs|MUU`%xfm~L%R0U z^H&@Tx7cd^r<924wP{d)j$V^djcB%4yFXJWhfOwKu1%_Ls1Y#PG3jz!T2j%vuL!^< z@Whp+6kQ>%!TvpvPYqbaAynz3%TGgV%B4-CbrS_*EP-y2P55YhDi*n1(+`Q+d-UD) zuKL6R$SypqAqZ?~Aw*v1)B+Vc^l_U^%_@Jo&O0RqpTM?IkX@C{r)`y4rsn?I{QBjM zld&fI&0mYMUfJwJoAm6xg721a2)E5CVx2l~u=Vc+SRwR}0u(&0s7+dw9ynD+#rE?S z5Gk)FE1OSxGC_~&Kc^x$=g)fxRqgjoe1qZm3fAV#?7AF6r3c|YXC5Y;)OjsSqCC6S zW}vOCz1Nu++&crW^d+Y2kV|U*7EDr>FbG^K`H}&SQ|Zf?`nVDIHYgve%I<4paV1*! zls~rWTJRo>56F_wK}(@R?7qnLuuky#HMOIn4$Ipp0=yscVK3q4)T%e}nGWOQoTI~r zIP$T=>%`<1_X+sc?^HQR8pnqqaFoD|-?jRe_3KTNtWAde&^(LpuK(#ugzC6mQoj(* zcG_XPIXE05r7jnJ@LU$GUA?YS@I;VLS>oZ14)U=c|4hV4%M@_q^;?VK8>0f-Us0@0 z(POQTF2=^(cA<9WJ?cNPW-fQ*S|1VJblhNkDiXGziqR@X`x&VGW*kE*L*U3rXo^l% zaUurR;-=O9W#AOKipN60mn?`oS`hUmnIJ>1V*e25)q;8=7*>C`QbN0wR@K8fZ%X!K z{~$fYu^8&*94{qf-DLn2j@x+r@163AJ*+_CFYU)5~Hg}NAdjKwn=V~QAl@e`m-&O2o&Ow`B zCB+vjo4Lzct3yH(7PAE!2WQ93dIBd<0D5tYV#pB1fNAMg9Z$2hJ zAcw7eR#ZEDpufry8@sjQ7CFl=B_-xd6dT&Y3}UChe3!=)*+%mSzHG-@j}MO&(B=-? zuMdr|QF9TjwhoL&^n}KP{6H`|OF)MlhUjA5XZ?jc7J4l*J#vE=TnbXLA;AgmnF4x~ zIj%&$p>6daQr^c31lDGuu~1b&h@hCm<{tCV^#^^+g!&agAC#BMeN5zxt~5Yq3mBln zm_3cOi|;Y98)8qYpaOvU$cnKXf)mHtmuFzzjVxbiS`I;$jq0{G2hD|2INnu+0^dbT zM+f5X=kvNDzDs44}K)|XZ;nnSafW@vy=DLqv0^x%0O0aj_m3=ea#zs;yZz-m1MwH8pnZ>0ddF- z$t`j;RFljO2}Z^u3!AyZy|aKy$NCG}y?J3RMjHh4DL*~z!96CRGQG^d9*Cg*1YK(QN3rqUrJLAO|@_8%F^jwmuMCbV2**eqO7pg#}VHqOKo(ya0!RK$nzdqGNvI zff(>a0?+kV@}|pB4*+x!-}i(z@s`du(QFoiO}XS(LW%n!7UT@58>EMU+=&r7`@M`htSUjaEAy;` z>a2=8Ic_)~eo9AD<8dj2(4{g)AUojibI<$6y$d_zO3hjl^z|V6cn&#$atXXA#s9j4l+L4JV}2aOOPS03qHM3I4Za_b?siPiycKF1Xn|6y1wK<<49t+;VB&h!8M^lg^Aj~8Fs2i&HDsSv{VIy zd1J$*U-h%=Ii}pso=&rMGHN`^_L4xLXYNt&qbIA~RE|%}KTn7}*uhcB?(E?pp z)5TVwxW)(7tWz^Q{w`R75*+eoEdvw!SVNKhdX$-BH>|~f)8z37iu%ig6kANDE#=hq zgunKTvV1s}OY%9c!ZaXZJrFE0wrMc9jFq2nF`CEX{r9XGo=I(YvNo`-zRV>K+nvYe z*5fc@KHuQP&-+>{aBo@l^W4MGLBZVN>iqka?trOT*7Hlt=bxGDEqN1suYSxALo$P! zu`7WJN2)=z)c3nmE!7Dp!Ac(-wOP5y!$&DbpT6S7$Z%U2@yZ=RQ6clse8z0&P2jGn ztxCqhemjT+!s=C!(ci3U|4tv^-1L%uy6FFxDNf6_VznZNO6*Se3CeOMJ@i8(91Ck4 z3!5DaL$B`p&EFY+sSijq%GXDZ5vAx=6nd@+^9G;c%2*i2g7H0m2A7)*IDV4sN9bm3=6r6xuMo)Lec#WY<)mNw zH?evSjiuc-z{BN*tJd)gW%A9&q{^y(2)ZI<*h$fA4QOU&Ha&^xN`L55r1bw;_vL@! b1dMGR>PFhdO&v1s{*f6Qni^E;J&OH*Owhqh literal 0 HcmV?d00001 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" + } + } +}