Skip to content

strategy

Create and update Business Model Canvas data in strategy.* — business units, the 9 canvas blocks, typed business-unit relationships, assumptions, provenance sources, draft canvas snapshots, competitors and personas.

Endpointhttps://strategy.mcp.devfellowship.com/mcp
Tools24
Backing datastrategy.business_units, .value_propositions, .customer_segments, .customer_relationships, .channels, .revenue_streams, .key_partners, .key_activities, .resources, .expense_categories, .business_unit_relationships, .assumptions, .sources, .artifact_sources, .canvas_snapshots, .competitors, .entities, .personas.
ToolDescription
list_business_unitsList strategy.business_units. Excludes archived rows unless include_archived: true. Optionally filter to children of a parent via parent_business_unit_id.
get_business_unitFetch one business unit by id.
create_business_unitCreate a business unit — the root entity every canvas block hangs off of.
update_business_unitPartially update a business unit by id.
archive_business_unitSet is_archived (default true; pass archived: false to unarchive). Soft flag only — child rows are untouched.
ToolDescription
set_canvas_blockUpsert a row into one of the 9 BMC block tables (value_proposition, customer_segment, customer_relationship, channel, revenue_stream, key_partner, key_activity, key_resource, expense_category) for a business_unit_id. Pass id to update, omit to insert. fields maps straight to the target table’s columns — key_partner and key_resource (resources table) accept free-text name (+ description for key_resource), added 2026-07-15 via dfl-schema #683 to fix the “Unnamed Partner” display bug.
ToolDescription
add_business_unit_relationshipCreate a typed edge in strategy.business_unit_relationships between two business units (from_bu → to_bu), e.g. “funds”, “commercializes”, “supplies_talent”.
ToolDescription
add_assumptionRecord a testable strategic assumption (desirability/viability/feasibility), its status, evidence, and risk if wrong.
ToolDescription
add_sourceRecord a strategy.sources row — where a piece of strategy data came from (a Fireflies call, a plans.devfellowship.com plan, a Company Brain node, or a manual note).
link_artifact_sourceLink any strategy.* artifact row (by table + id) to a source created via add_source.
ToolDescription
create_canvas_snapshotAssemble a business unit’s full canvas (business unit + all 9 blocks + active relationships + assumptions) into a strategy.canvas_snapshots row, status: "draft". Version auto-increments per business unit.

Competitors, personas and customer segments

Section titled “Competitors, personas and customer segments”
ToolDescription
add_competitorCreate a strategy.competitors row for a business unit, linked to a strategy.entities row (pass entity_id, or entity_name to create the entity inline).
add_personaCreate a strategy.personas row under a customer segment (occupation, buying role, ICP priority).
list_personasList personas. Filter by customer_segment_id (direct) or business_unit_id (joins through customer_segments to cover every segment of the BU).
update_personaPartially update a persona by id (including re-parenting to a different customer_segment_id).
delete_personaHard-delete a persona by id — strategy.personas has no soft-delete flag. Use to clean up misparented/duplicate personas.
list_customer_segmentsList strategy.customer_segments rows for a business_unit_id.
update_customer_segmentPartially update a customer segment by id.
delete_customer_segmentHard-delete a customer segment by id. See the RLS caution below — customer_segments currently has no DELETE policy.
ToolDescription
list_writing_patternsList strategy.writing_patterns rows for a business_unit_id, ordered by sort_order. Optionally narrow to one slot. Each row is a “voice slot” — a reusable definition of how a given surface should sound.
upsert_writing_patternCreate or update one voice slot. Pass id to update that exact row, or slot to update-or-insert by slot. pattern is free-form jsonb and replaces the stored object (no deep merge).
ToolDescription
list_keywordsList strategy.keywords (the SEO keyword corpus) of one business_unit_id. count is the exact corpus size of that BU, independent of limit.
delete_keywordsHard-delete keywords by id, scoped to one business_unit_id. Metrics and relations cascade. Returns deleted_ids and not_deleted_ids. The cleanup path for e2e specs, which delete every keyword they create.
upsert_keywordsCreate keywords in one business_unit_id (up to 200 per call), each with optional cluster_name / cluster_color, a keyword_metrics snapshot, and a parent_text for the mind-map tree. Identity is (business_unit_id, slug) with the campaigns app slugifier. Existing keywords are reused and left unchanged unless update_existing is true. Idempotent: re-run the same batch after a partial failure.

Every tool on this page authenticates with the caller’s Supabase user JWT (RLS-scoped). None of them use service_role, per the fleet-wide rule that MCP tools carry the calling user’s own privileges — writes are exactly as permitted (or blocked) by the RLS policies above.