Act SDK
The fastest way to add MCP to TypeScript apps.
Act SDK is the simplest way to bring MCP into your application. It gives you everything you need to go from existing logic to a working MCP server in minutes. Expose existing functions as tools, integrate with frameworks like Next.js, Express, Hono, etc., and ship without building servers from scratch.
Built on top of the official Model Context Protocol TypeScript SDK.
// your existing function
async function getDoughnuts({ userId, limit }: { userId: string; limit?: number }) {
return db.doughnuts.findMany({ where: { userId }, take: limit ?? 10 });
}
// register it β now MCP-ready
export const getDoughnuts = act.action({
id: 'getDoughnuts',
description: 'Get doughnuts for a user',
input: z.object({
userId: z.string(),
limit: z.number().optional(),
}),
handler: async ({ userId, limit }) => {
return db.doughnuts.findMany({ where: { userId }, take: limit ?? 10 });
},
});
// your app
await getDoughnuts({ userId: '123', limit: 5 });
// an MCP agent
// β calls getDoughnuts with { userId: '123', limit: 5 }
No new server. No separate process. No MCP knowledge required.
Install
npx @act-sdk/cli init
Or manually:
npm install @act-sdk/core @act-sdk/mcp @act-sdk/adapters zod
Next.js
1. Wrap your existing logic (lib/actions/doughnuts.ts):
import { z } from 'zod';
import { act } from '@/act-sdk.config';
export const getDoughnuts = act.action({
id: 'getDoughnuts',
description: 'Get doughnuts for the authenticated user',
input: z.object({ limit: z.number().optional() }),
handler: async ({ limit }, context) => {
return db.doughnuts.findMany({
where: { userId: context?.authInfo.userId },
take: limit ?? 10,
});
},
});
export const orderDoughnut = act.action({
id: 'orderDoughnut',
description: 'Order a doughnut for the authenticated user',
input: z.object({ flavour: z.string() }),
handler: async ({ flavour }, context) => {
return db.orders.create({
data: { flavour, userId: context?.authInfo.userId },
});
},
});
2. Config File (act-sdk.config.ts):
import { createAct, defineConfig } from '@act-sdk/core';
export const act = createAct();
export default defineConfig({
name: 'my-app',
description: 'My app MCP server',
version: '1.0.0',
act,
});
3. Add the route (app/api/mcp/route.ts):
import { createNextHandler } from '@act-sdk/adapters/nextjs';
import config from '@/act-sdk.config';
export const { GET, POST, DELETE } = createNextHandler(config, {
auth: async (req) => {
const token = req.headers.get('authorization')?.split(' ')[1];
if (!token) return null;
return verifyJWT(token);
},
});
STDIO
import { createStdioServer } from '@act-sdk/adapters/stdio';
import config from './act-sdk.config.js';
createStdioServer(config);
Packages
| Package | Purpose |
|---|---|
@act-sdk/core |
Action registry, createAct(), defineConfig() |
@act-sdk/mcp |
Translates actions into MCP tools |
@act-sdk/adapters |
Next.js and STDIO adapters |
Coming Soon
Express, Hono, and Fastify adapters are on the roadmap. If you need one sooner, open an issue and let us know β we prioritize based on demand.
MIT
No comments yet
Be the first to share your take.