Skip to content
Dashboard

The second wave of MCP: Building for LLMs, not developers

Link to headingHow LLMs use APIs differently

// Traditional API usage: developer manages the sequence
const project = await client.projects.create({
name: domain.replace(/\./g, '-'),
gitRepository: { repo: repoUrl }
});
await client.projects.createProjectEnv({
idOrName: project.id,
upsert: 'true',
requestBody: Object.entries(env).map(([key, value]) => ({
key, value,
target: ['production', 'preview', 'development'],
type: 'encrypted'
}))
});
const deployment = await client.deployments.createDeployment({
requestBody: {
name: project.name,
target: 'production',
gitSource: { type: 'github', repo: repo.replace('.git', ''), ref: 'main' }
}
});
await client.projects.addProjectDomain({
idOrName: project.id,
requestBody: { domain: domain }
});

Link to headingSingle workflow tools vs multiple endpoints

create_project(name, repo)
add_environment_variables(project_id, variables)
create_deployment(project_id, branch)
add_domain(project_id, domain)

deploy_project(repo_url, domain, environment_variables, branch="main")

Link to headingDesigning workflow based MCP tools

server.tool(
"deploy_project",
"Deploy a project with environment variables and custom domain",
{
repo_url: z.string(),
domain: z.string(),
environment_variables: z.record(z.string()),
branch: z.string().default("main")
},
async ({ repo_url, domain, environment_variables, branch }) => {
// Handle the complete workflow internally
const project = await createProject(repo_url, branch);
await addEnvironmentVariables(project.id, environment_variables);
const deployment = await deployProject(project.id);
await addCustomDomain(project.id, domain);
return {
content: [{
type: "text",
text: `Project deployed successfully at ${domain}. Build completed in ${deployment.duration}s.`
}]
};
}
);

Link to headingPerformance improvements with workflow tools