Set project config
set_project_configUpdate a project board's settings—code location, website path, voice lint, pricing, and more—without changing unprovided fields.
Instructions
Update a board's settings (only provided fields change). Writes to the MCP-managed config; never mutates legacy project_config.json. codeLocation points the code tools at the project's source repo; websiteLocation points the website tools (get_site/set_site/add_page/deploy_site/scaffold_site/...) at the project's SHIPPED site, which may live outside the pad in its own repo (absolute path to the assets dir) — leave it unset to keep the site under /site/. Also configures voiceLint/voiceLintMin/voiceProfile (AI-writing-tell self-checks on drafting tools) and the etaHints dispatch toggle.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | The project's north star outcome, e.g. 'become the default agent-run task board; grow paid seats'. Injected into work packets and aimed at by steer_project's research pass. | |
| ragK | No | FBMCPF-264: how many RAG chunks to attach to a work packet (default 5). | |
| stage | No | Project lifecycle stage (FBMCPF-149). | |
| checks | No | FBMCPF-261: async background static-check config. Checks run DETACHED on every commit (pure CPU, zero model tokens) so the orchestrator can commit and immediately keep working, then collect results with get_check_results. When absent but the code repo has a package.json, a cheap syntax-only default applies. | |
| pricing | No | FBMCPF-157: per-model $/MTok overrides merged over the built-in defaults (server/pricing.js DEFAULT_PRICING, sourced from current Anthropic API pricing). Keyed by model tier ("fable" | "opus" | "sonnet" | "haiku" | "default"); only the fields you provide change, the rest keep their default. blendedPerMTok is used as a fallback rate for work-log entries that only logged a single total token count (no input/output split). | |
| project | Yes | ||
| website | No | ||
| etaHints | No | Append an ETA reminder to dispatch instructions for steps expected to exceed ~2 minutes. Default on. | |
| products | No | ||
| doneGates | No | FBMCPF-215: per-project preconditions on → Done — require no unresolved review comments, a passing logged test run, and/or a work-log entry for the ticket. Each toggle independent, all off by default; approve:true overrides. | |
| imageTool | No | Preferred image-generation tool/connector/skill name for generate_image (e.g. an image MCP or an 'imagegen' skill). If unset, generate_image uses any available image generator, else falls back to SVG. | |
| voiceLint | No | FBMCPF-267/268: turn on AI-writing-tell self-checks (voice lint) for drafting tools like draft_share and post_project_update; results attach as a warn-only `voice` key on the response. Default off. | |
| agentModel | No | ||
| brandTitle | No | Board display title (branding). | |
| brandVoice | No | Brand voice/tone for generated media, e.g. 'confident, playful, plain-spoken'. | |
| brandWords | No | Brand / trial words woven into generated media (e.g. product name, taglines, campaign phrases). | |
| gitTargets | No | Explicit commit destinations: code, projectpad, and the shipped website can each live in different repos (FBMCPF-149, FBMCPF-249). websiteRepo is otherwise inferred by walking up from websiteLocation to its .git root. | |
| description | No | ||
| slackEvents | No | When on, a ticket must pass through Review before it can be marked Done (set_status enforces the gate; approve:true overrides). | |
| codeLocation | No | ||
| customPrompt | No | Project-specific guidance injected into every work packet. | |
| ragInPackets | No | FBMCPF-264: attach top-k local lexical RAG chunks (BM25 over KB/docs/ticket-history) to every work packet as ragChunks. Zero tokens, zero network. Default true. | |
| slackWebhook | No | Project's https://hooks.slack.com/... webhook; null clears. Opt-in egress. | |
| voiceLintMin | No | FBMCPF-267/268: voiceScore threshold above which a voice-lint warning is attached (default 25). Only used when voiceLint is on. | |
| voiceProfile | No | FBMCPF-267: project-specific tuning for the voice-lint ruleset used when voiceLint is on. | |
| brandSubtitle | No | Board subtitle / byline (branding). | |
| requireReview | No | ||
| websiteLocation | No | Absolute path to the project's SHIPPED website assets dir (may be outside the pad, in its own git repo). When set, all website tools operate there instead of <project>/site/ (FBMCPF-249). | |
| researchOnIntake | No | FBMCPF-263: run an optional research phase before implementing a ticket — cheap haiku/sonnet sub-agents collate approaches/prior-art/comparables/risks into a brief for the implementing model. Defaults ON when unset (resolved in code, not force-written). Per-ticket escape hatch: a research:off label skips it, research:on forces it. | |
| sprintAutoAssign | No | FBMCPF-219: auto-assign un-slotted new tickets to the active sprint — off (default), priority (priority <= 2 only), or all. An explicit sprint: label always wins. | |
| requireChecksOnDone | No | FBMCPF-261: when on, set_status refuses to move a ticket to Done if its latest background static-check run FAILED (approve:true overrides). A still-running run does not block — it just adds a note. Default false. | |
| requireCommitOnDone | No | When on and git is enabled for the project, set_status refuses to move a ticket to Done unless a commit references it (recorded via commit_feature or found via git log --grep); approve:true overrides. Default false — a plain non-blocking uncommitted/commitReminder warning otherwise. |