Ship VC signal features inside your Next.js app — Server Components, Route Handlers, Server Actions.
POST https://signals.gitdealflow.com/api/a2aThe Vercel AI SDK is the default for AI features inside web apps. If you ship Next.js — and most developer-investors building portfolio tools do — the AI SDK is the path of least resistance from idea to production. generateText, streamText, and tool() compose with React Server Components, Route Handlers, Server Actions, and the AI Gateway out of the box.
Drop GitDealFlow in as a single tool() with a Zod-validated input schema and your portfolio dashboard becomes deal-flow-aware. The MCP integration via experimental_createMCPClient gives you the same five skills with zero argument typing — useful for prototypes — but for production-shaped apps, the explicit tool() path is more debuggable and friendlier to TypeScript inference.
Pull weekly top 20 inside a Server Component, render the table at request time. Cache with React's `cache()` helper or Next.js fetch cache; the dataset refreshes weekly so 6-hour TTL is safe.
useChat hook + streamText + tool() = a deal-flow chat panel that streams tokens, calls GitDealFlow, and renders structured tool results inline via the Generative UI pattern.
Route to OpenAI for fast queries and Anthropic for memo writing — same tool, no code change. The AI Gateway handles the model switch and the observability is unified.
Vercel Workflow DevKit (WDK) makes long-running deal-flow batches durable. 'Enrich 50 startups overnight' survives crashes, retries automatically, and emails the result when done.
// app/api/chat/route.ts (Next.js App Router)
// Models route through the Vercel AI Gateway via plain string IDs.
import { tool, streamText, convertToModelMessages, type UIMessage } from "ai";
import { z } from "zod";
export const runtime = "nodejs"; // tool fetch + LLM stream
const A2A = "https://signals.gitdealflow.com/api/a2a";
const gitdealflow = tool({
description:
"Live VC engineering signals — trending startups, sector watchlists, named-startup profiles, dataset summaries, methodology citation.",
inputSchema: z.object({
skill: z.enum([
"get_trending_startups",
"search_startups_by_sector",
"get_startup_signal",
"get_signals_summary",
"get_methodology",
]),
args: z.record(z.string(), z.any()).optional(),
}),
execute: async ({ skill, args }) => {
const res = await fetch(A2A, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0", id: 1, method: "message/send",
params: { message: { role: "user", parts: [
{ kind: "data", data: { skill, args: args ?? {} } },
]}},
}),
});
return (await res.json()).result.artifacts[0].parts[0].data;
},
});
export async function POST(req: Request) {
const { messages }: { messages: UIMessage[] } = await req.json();
const result = streamText({
model: "openai/gpt-5.4",
tools: { gitdealflow },
messages: convertToModelMessages(messages),
});
return result.toUIMessageStreamResponse();
}// app/dashboard/trending/page.tsx
import { unstable_cache } from "next/cache";
const A2A = "https://signals.gitdealflow.com/api/a2a";
const fetchTrending = unstable_cache(
async () => {
const res = await fetch(A2A, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0", id: 1, method: "message/send",
params: { message: { role: "user", parts: [
{ kind: "data", data: { skill: "get_trending_startups" } },
]}},
}),
});
return (await res.json()).result.artifacts[0].parts[0].data.startups;
},
["gitdealflow-trending"],
{ revalidate: 21600, tags: ["gitdealflow"] }, // 6h
);
export default async function TrendingPage() {
const startups = await fetchTrending();
return (
<main>
<h1>Trending this week</h1>
<ol>
{startups.map((s: { name: string; sector: string }) => (
<li key={s.name}>
<strong>{s.name}</strong> — {s.sector}
</li>
))}
</ol>
</main>
);
}Yes. The AI Gateway sits transparently between your Vercel AI SDK code and any provider you're routed to. The gitdealflow tool() definition is unchanged — you can swap models freely or BYOK without touching the integration.
Yes — the A2A endpoint is just a fetch, edge-safe. The MCP path (experimental_createMCPClient with stdio transport) is Node-only because it spawns a subprocess. For Edge, stick with the explicit tool() definition.
WDK gives you durable, retryable steps. Wrap the gitdealflow fetch as a step.run() so a long batch — 'enrich 50 startups, write to Postgres, email when done' — survives crashes and retries 5xx automatically. The endpoint returns 200 with JSON-RPC error envelopes, so check `result` vs `error`, not HTTP status.
Email signal@gitdealflow.com — replies within 24 hours, EU business time. Include the framework name and the error in the message body and a snippet of your tool definition.
Email support