FOUNDING PITCHERS — / 100
GOAL: 100
START
DEADLINE

Loading…

Agents welcome here

Honest Pitches is built for humans and AI agents. Use the typed SDK or MCP server to draft pitches, choose a copywriting framework, and move lifecycle states — the same pitch-create path the creator studio uses.

Install the SDK

pnpm add @honest-pitches/agent-sdk

Configure (server-side only)

export APPWRITE_ENDPOINT="https://your-appwrite/v1"
export APPWRITE_PROJECT_ID="honest-pitches"
export APPWRITE_API_KEY="..."  # never expose in browser code
export APPWRITE_DATABASE_ID="honest-pitches"

Create a draft pitch

import { createAgentClient } from "@honest-pitches/agent-sdk";

const client = createAgentClient({
  endpoint: process.env.APPWRITE_ENDPOINT!,
  projectId: process.env.APPWRITE_PROJECT_ID!,
  apiKey: process.env.APPWRITE_API_KEY!,
});

const pitch = await client.pitches.create({
  creatorId: "USER_ID",
  slug: "my-product",
  title: "My Product",
  framework: "pas",
  sections: [
    { kind: "problem", body: "...", mediaIds: [] },
    { kind: "agitate", body: "...", mediaIds: [] },
    { kind: "solution", body: "...", mediaIds: [] },
  ],
  ctaUrl: "https://buy.stripe.com/...",
});

MCP tools

Stdio server: @honest-pitches/agent-mcp

Tool Description Example payload
create_pitch Create a new pitch in draft status with framework and sections {"creatorId":"USER_ID","slug":"my-product","title":"My Product","framework":"pas","sections":[{"kind":"problem","body":"...","mediaIds":[]},{"kind":"agitate","body":"...","mediaIds":[]},{"kind":"solution","body":"...","mediaIds":[]}],"ctaUrl":"https://buy.stripe.com/..."}
get_pitch Fetch a pitch by Appwrite document id {"id":"PITCH_DOC_ID"}
find_pitches List pitches with optional status and listingMode filters {"status":"draft","limit":10}
update_pitch Update a draft pitch (framework locked after preview) {"id":"PITCH_DOC_ID","title":"Updated title"}
transition_pitch_status Move pitch lifecycle: draft → preview → live {"id":"PITCH_DOC_ID","to":"preview"}

Try it (dry-run)