SKILL.md
Deploy Anthropic Integration
Overview
Claude integrations are stateless API wrappers — a serverless function receives a user request, streams from the Messages API, and returns the response. No database, no connection pool, no persistent state.
Vercel Edge Function (Recommended)
// app/api/chat/route.ts (Next.js App Router)
import Anthropic from '@claude-ai/sdk';
export const runtime = 'edge';
export async function POST(req: Request) {
const client = new Anthropic();
const { messages, system } = await req.json();
const stream = await client.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 4096,
system: system || 'You are a helpful assistant.',
messages,
stream: true,
});
// Convert Anthropic stream to ReadableStream for SSE
const encoder = new TextEncoder();
const readable = new ReadableStream({
async start(controller) {
for await (const event of stream) {
if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
controller.enqueue(encoder.encode(`data: ${JSON.stringify(event.delta)}\n\n`));
}
}
controller.enqueue(encoder.encode('data: [DONE]\n\n'));
controller.close();
},
});
return new Response(readable, {
headers: {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
},
});
}
Instructions
Step 1: Deploy to Vercel
# Add secret
vercel env add ANTHROPIC_API_KEY
# Deploy
vercel --prod
Fly.io (Long-Running / WebSocket)
FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
fly launch --name my-claude-app
fly secrets set ANTHROPIC_API_KEY=sk-ant-api03-...
fly deploy
Google Cloud Run
gcloud run deploy claude-api \
--source . \
--region us-central1 \
--allow-unauthenticated \
--set-secrets=ANTHROPIC_API_KEY=claude-key:latest \
--timeout=300 \
--concurrency=80
