@keenable/ai-sdkgives anygenerateTextorstreamTextcall web search and page fetch as AI SDK tools. It works without a key, so the first snippet below runs as-is, with no signup before the first call.- Vercel Connect lists Keenable in its catalog. Connect keeps your API key at the team level and hands it to your code at runtime with
getToken, so the key never sits in an environment variable.
AI SDK tools
Install
ai and zod are peer dependencies, already present in an AI SDK project. Works on ai v5, v6 and v7, and on zod v3 and v4. The examples use @ai-sdk/openai; any model provider works.
Add the tools
keenable_search and keenable_fetch. To add just one, import keenableSearch or keenableFetch instead of the pair. The tools are built on the official keenable SDK.
Set
KEENABLE_API_KEY to authenticate — this removes the hourly request cap. Without a key, calls run on the shared public tier at lower rate limits.keenableTools({ apiKey: "keen_<your_key>" }). On Vercel, the next section keeps it out of your environment.
Keep the key in Vercel Connect
You don’t need Connect, or a key, to start. A key lifts the request limits, and Connect is where a Vercel project keeps it.Get a key
Create an API key in the Keenable console.Create the connector
In the Vercel dashboard, open Connect for your project, select Create Connector and choose Keenable. A connector created from the project page is linked to that project. Or, from a directory linked to the project:Fetch the key at runtime
keenable/keenable is the connector’s UID: the service, then the name you gave it. On Vercel, getToken authenticates with the deployment’s OIDC token; locally, run vercel env pull first. Call it per request rather than once at startup. The SDK caches the key in process.
Without the AI SDK package, send the same value to the REST API as X-API-Key or Authorization: Bearer:
OAuth for MCP
The connector also offers OAuth on the MCP server. Without sign-in, the MCP server answers on the public tier, which is how a URL-only client such as a Claude custom connector uses it. With Connect’s OAuth method, each user signs in to Keenable once and Connect stores their token, so their calls run on their own Keenable account, the same way the ChatGPT install works, and there is no key to copy. It issues user tokens only (subject: { type: "user", id }), so use the API key method for anything that runs without a signed-in user.