Founders Os

by OurThinkTank

329 downloads
Not rated
GitHub

About

Founders OS is an open-source MCP server that puts your whole business inside Claude, Cursor, or any MCP client. It connects CRM, financials, tasks, and long-term memory behind one server, so you can ask a single question that reads across all of them. Example: "Which clients are

Details

Author
OurThinkTank
Downloads
329
Categories
Productivity, Finance, AI

- Connects CRM, financials, tasks, and long-term memory in one server
- Live cross-system queries return answers from shared context
- Self-hosted on your own Supabase instance
- No middleman backend or SaaS holds your data
- MIT licensed, 100% open source
- Uses stdio transport for MCP clients

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Founders Os
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Founders OS is self-hosted and deploy-it-yourself. You run it on your own Supabase instance and connect it to any MCP client (like Claude or Cursor) via stdio transport. Install and configure the server according to the provided documentation, then point your MCP client at it.

ping

Test tool — returns pong.

get_version

Returns the running version of @ourthinktank/founders-os, the rendering contract version (used to detect plugin/server drift), how the connector was launched (launchMethod: npx | global | local | unknown) with a tailored howToUpdate string, the release channel (channel: stable | prerelease), the published head of that channel, and the database schema status (dbSchemaStatus: current | behind | ahead | untracked | unknown) with a howToUpdateDb step when action is needed. Version comparison is semver-aware and channel-aware: stable builds compare against the `latest` tag, prerelease builds against the `next` tag, so a prerelease that is ahead of stable is NOT reported as an update. versionStatus is one of current | update-available | ahead | unknown; updateAvailable is true only when a genuinely newer version exists on your channel (with updateTo naming it). Call at session start; if updateAvailable is true relay current vs updateTo and the howToUpdate step, and if dbSchemaStatus is behind or untracked relay the howToUpdateDb step.

get_usage_guide

Returns a detailed guide on how to use Founders OS - covering all six domains (CRM, Tasks, Tags, Finance, Feeds, Memory), surface tools, search protocols, common workflows, and tips. Call this when uncertain about how to approach a task.

show_capabilities

Returns example prompts and workflows organized by domain (CRM, Tasks, Finance, Feeds, Memory, Surfaces). Call this when a user asks 'what can you do?', 'show me what I can do', 'help me get started', or wants to explore what Founders OS offers. Lighter than the full usage guide - focused on natural-language examples rather than technical reference.

list_demos

Returns available interactive demo walkthroughs bundled with Founders OS. When called without a name, returns a summary list of available demos. When called with a demo name, returns the full script (with shared presentation rules prepended) so the AI agent can run it directly. Call this when a user asks about demos, wants to explore features, or is onboarding.

add_customer

Create a new customer record. Customers are organizations or individuals that your business works with or is pursuing. If similar customers already exist, a `conflict` response is returned with options to use an existing record or create a new one. Pass skip_duplicate_check=true to bypass this on retry.

get_customer

Get a single customer with their contacts, recent interactions, and open tasks.

update_customer

Update fields on an existing customer record.

search_customers

Search customers by name, notes, city, state, or tags. Returns matching customers with summary info.

list_customers

List customers with optional filters. Returns paginated results with summary info. Response includes a render field with tiered rendering guidance - check it before composing your reply.

remove_customer

Remove a customer by archiving (sets phase to inactive, recoverable) or permanently deleting. On first call, returns a `conflict` with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Contacts cascade on delete; history is preserved on archive.

add_contact

Add a contact person to a customer organization. Contacts are individuals you interact with at that company.

update_contact

Update a contact's details.

search_contacts

Search for contacts by name, email, phone, or role. Returns matching contacts with their customer/organization info. Use this when someone asks about a person by name.

remove_contact

Remove a contact by archiving (marks as inactive, recoverable) or permanently deleting. On first call, returns a `conflict` with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Interaction history referencing this contact is preserved on archive.

log_interaction

Record an interaction with a customer (email, call, meeting, demo, support ticket, event, or general note).

list_interactions

Get interaction history for a customer, with optional date range and type filter.

remove_interaction

Soft-delete a logged interaction (email, call, meeting, etc.) by its UUID. Interactions are append-only touchpoint history, so there is no archive state - removal is a soft-delete, recoverable for 30 days, then purged. On first call returns a `conflict` with DELETE / CANCEL options; pass mode after the user decides.

get_dashboard

Get a CRM dashboard summary: total customers by type and phase, overdue tasks, recent interactions, and upcoming tasks within a 7/14/30-day window. Response includes a render field with tiered rendering guidance - check it before composing your reply.

create_task

Create a new task. Scope 'org' (default) is visible to all team members; 'personal' is private to the creator. Use assigned_to with a FOUNDERS_OS_USER_ID for human assignment, or '@claude' / '@gpt' for AI assignment. Optionally link to any FounderOS entity (customer, contact, transaction, etc.) at creation time. If the response contains a `conflict` field, the task was NOT created. Present all options to the user using an interactive chooser (AskUserQuestion) if available, then retry with the selected date.

get_task

Fetch a single task by ID, including all linked entities and notes.

update_task

Update any fields on a task. Only provided fields are changed. Setting status to 'done' automatically sets completed_at. If the response contains a `conflict` field, the update was NOT applied. Present all options to the user using an interactive chooser (AskUserQuestion) if available, then retry with the selected date.

complete_task

Mark a task as done. Optionally log a completion note. Set store_as_memory=true to persist the completion as an org-scoped memory. Returns unblocked_tasks if completing this task unblocks dependent tasks. If the task is blocked by an incomplete task, a `conflict` response is returned. Pass force=true to complete anyway after conflict resolution.

remove_task

Remove a task by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a `conflict` with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Delete removes the task and all its links and notes permanently. Archive sets archived_at and preserves everything.

list_tasks

List tasks with rich filtering. Omitting scope returns both org tasks and the caller's personal tasks. Filter by entity_type + entity_id to see tasks linked to a specific customer, transaction, etc. Use assigned_to='@claude' to surface the AI work queue. Response includes a render field with tiered rendering guidance - check it before composing your reply.

link_task

Link a task to any FounderOS entity: customer, contact, transaction, contract, memory, or interaction. A task can have multiple links. Duplicate links are silently ignored.

unlink_task

Remove a specific entity link from a task.

list_entity_tasks

Get all tasks linked to a specific entity (customer, contact, transaction, etc.).

add_task_note

Add a progress note to a task without changing its status. Useful for logging updates, blockers, or partial progress mid-task.

assign_task

Assign or reassign a task to a team member or AI agent. Use a FOUNDERS_OS_USER_ID for humans, '@claude' or '@gpt' for AI agents, or pass an empty string to unassign. A task has exactly one assignee by design - the single accountable owner ('one neck to grab') - so assigning replaces the current owner rather than adding a second. For others who are involved, name them in the task description or use @person tags.

get_task_summary

Dashboard-style summary of the task queue: overdue, due today, upcoming, counts by status, by assignee, and a dedicated AI tasks section for tasks assigned to @-prefixed agents. Call at session start to orient on what needs attention. Response includes a render field with tiered rendering guidance - check it before composing your reply.

list_tags

List all registered tags for the current company. Returns name, slug, color, and description for each tag. Use this to see what tags are available before tagging tasks or customers.

preview_tags

Validate tag names and return the same warnings tagging would produce (bare contact name, customer/org match, missing ! or # prefix, typo) WITHOUT registering anything. Read-only - nothing is persisted. Call when you want to show how a tag name would be classified before committing it. Returns { warnings, auto_registered: [] }; auto_registered is always empty.

create_tag

Register a new tag in the tag registry. The slug (lowercase, hyphenated form) must be unique per company. Returns an error if a tag with the same slug already exists.

rename_tag

Rename a registered tag. Updates the display name and slug. If the tag is in use and propagate is not explicitly set, a `conflict` response is returned asking whether to propagate the rename. Set propagate=true or propagate=false to skip the conflict.

remove_tag

Remove a tag by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a `conflict` with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. If the tag is owned by a project, the tool suggests removing the project instead. On delete, pass clean_items=true to also strip the tag from all tasks and customers that use it.

memory_store

Store a specific memory entry. Use scope='org' for team-wide visibility, 'personal' for caller only. Call this whenever you learn something worth remembering across sessions.

memory_recall

Semantically search stored memories and return the most relevant results. Call at the start of any project session to load prior context.

memory_forget

Delete a specific memory entry by its ID. For org-scoped memories, a `conflict` response is returned with a preview so the user can confirm. Pass confirm=true to skip the preview on retry.

memory_update

Update an existing memory's content in place. Re-embeds the new content for accurate future recall. For org-scoped memories, returns a conflict preview showing the before/after change for user confirmation. Pass confirm=true to apply after reviewing.

memory_summarize_and_store

Distill a session summary into a memory entry and store it. Pass a full narrative description of what happened — the more detail the better. Call at the end of meaningful sessions.

add_transaction

Record an income or expense transaction. Automatically updates the account balance. Provide a positive amount — the sign is applied based on the category type.

list_transactions

List financial transactions with optional date range and account filters. Response includes a render field with tiered rendering guidance - check it before composing your reply.

set_transaction_customer

Attribute an existing transaction to a customer, or detach it. Pass a customer_id to attribute the transaction, or null to clear the attribution.

add_category

Create an income or expense category.

list_categories

List all financial categories, optionally filtered by type.

add_account

Create a capital account (e.g. bank account, credit card, wallet).

list_accounts

List all capital accounts with their current balances.

transfer_between_accounts

Record a transfer of funds between two capital accounts. Both legs are marked exclude_from_reports=true so they don't skew P&L. If the inflow leg fails after the outflow succeeds, the outflow is automatically reversed to keep account balances consistent. For full atomicity, a future migration will wrap both legs in a single DB transaction.

get_pl_report

Return a profit & loss summary grouped by category for a given date range. Excludes transactions marked exclude_from_reports. Pass `customer_id` to scope the report to a single attributed customer, or `group_by_customer: true` to include a per-customer rollup alongside the category breakdown. Transactions with no customer attribution bucket as 'Unattributed' in the rollup. Response includes a render field with tiered rendering guidance - check it before composing your reply.

remove_transaction

Remove a transaction by archiving (hides from views and reports, recoverable) or permanently deleting (reverses the balance effect). On first call, returns a `conflict` with confirm / archive / cancel. If the transaction is one leg of a transfer, confirming the deletion removes both legs together to keep the books balanced.

get_financial_summary

Return a snapshot of the company's financial position: total assets across all accounts, plus year-to-date income and expenses. Response includes a render field with tiered rendering guidance - check it before composing your reply.

remove_account

Remove a financial account by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a `conflict` with ARCHIVE / DELETE / CANCEL. Accounts with active (non-deleted) transactions cannot be deleted - the delete option becomes available once the account has no live transactions.

remove_category

Remove a financial category by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a `conflict` with ARCHIVE / DELETE / CANCEL. Categories with active (non-deleted) transactions cannot be deleted.

set_financial_access

Grant or restrict a team member's access to financial tools. Requires owner role. Access levels: 'none' = no financial tools; 'read' = view only (balances, transactions, reports); 'write' = full access including add, edit, and delete. Owners cannot set their own access to 'none' or 'read' if they are the last owner — this would lock the company out of financial management.

get_financial_access

Check a user's financial access level. Any user can check their own access. Owners can check any user by passing target_user_id.

get_audit_log

Read the immutable audit log for this company. Owners can read all entries (scope='all'). Any member can read their own entries (scope='mine'). Covers financial transactions, CRM deletes, org memory changes, playbook runs, access management, and member changes. Records cannot be modified or deleted.

list_members

List all team members in this company with their owner status and financial access level. Any member can call this — you don't need to be an owner to see the roster.

add_member

Add a team member to the company. Creates their company_members row with default access (no financial access, not an owner). Use set_financial_access to grant financial access, and set_member_owner to grant owner status. Requires owner role.

set_member_owner

Promote or demote a team member's owner status. Owners can manage financial access, add/remove members, and read the audit log. Promoting automatically grants 'write' financial access. You cannot demote the last remaining owner — add another owner first. Requires owner role.

remove_member

Remove a team member from the company. Deletes their company_members row, revoking all financial access. Their historical data (tasks, interactions, transactions) is preserved. Cannot remove the last owner. Requires owner role.

subscribe_feed

Subscribe to an RSS, Atom, or JSON Feed. Fetches once to populate metadata if this is the first subscription to this URL in the company. Tags classify the feed (e.g. ['tech', 'ai']). Set pinned=true to include in morning briefing.

unsubscribe_feed

Unsubscribe from a feed. Only removes your subscription - other team members and the shared catalog entry are not affected. Bookmarks from this feed are preserved.

list_feeds

List all subscribed RSS feeds, optionally filtered by tag or pinned status. Returns feed metadata from the shared catalog along with per-user tags and pinned status.

pin_feed

Pin a feed so it appears in the morning briefing. Pinned feeds are fetched during session start to generate headline summaries.

unpin_feed

Unpin a feed so it no longer appears in the morning briefing. The feed remains subscribed - you just won't see headlines in session start.

import_starter_feeds

Import a curated starter feed list covering tech, AI, business, news, crypto, engineering, and more. Skips any feeds you're already subscribed to. A subset of feeds are pinned by default for the morning briefing.

refresh_feeds

Force-refresh feed data by clearing the cache. Optionally refresh a specific feed and update its catalog metadata. If no feed_id is given, clears the entire cache.

get_feed_items

Fetch the latest items from subscribed feeds. Returns a numbered summary list with title, author, date, and whether full content is available. Use read_feed_item with the item number to get full content. Filter by feed_id for a specific feed, or by tag for a topic.

read_feed_item

Read the full content of a feed item by its index number (from get_feed_items). If the feed provides full article content, it is returned as HTML. If only a summary is available, the link to the original article is returned instead.

bookmark_item

Save a feed item for later. Snapshots the item content so it persists beyond the cache. Use the feed_url and item index number from get_feed_items.

list_bookmarks

List saved feed item bookmarks, newest first. Returns title, summary, source feed, and link for each bookmark.

remove_bookmark

Remove a saved bookmark by its ID.

get_feed_briefing

Generate a compact headline briefing from pinned feeds for the morning dashboard. Returns one headline per tag, capped at 8 total. Designed to be included in get_session_start without slowing it down. Only fetches pinned feeds. Response includes a render field with tiered rendering guidance - check it before composing your reply.

get_entity_card

Get a complete picture of any entity: the record itself, all open tasks linked to it, recent interactions, and any linked transactions. Replaces multiple separate calls when you need to answer 'what's going on with X?'

get_session_start

Session orientation pointer. Returns today's date and a list of tools to call in parallel for a complete morning briefing. Does not fetch data itself - call the listed tools to get the actual content. Use this at the start of every session or when the user says 'start my day', 'catch me up', or similar. The response includes a rendering_contract field that defines the four-tier render ladder used across every founders-os tool for the rest of the session - read it before composing any founders-os output. Response includes a render field with tiered rendering guidance - check it before composing your reply.

get_weekly_retro

Completed-task retrospective for a given week. Groups done tasks by their first tag, includes completion notes as quotes, and optionally formats as a LinkedIn-ready draft. Useful for weekly reviews, standup prep, and public updates. Response includes a render field with tiered rendering guidance - check it before composing your reply.

get_stuck_list

Surface stuck, stale, and overdue tasks that need triage. Returns in_progress tasks untouched for N days, blocked tasks, and overdue tasks (todo or in_progress with past due date). Each row includes days_stale and a suggested triage action. Response includes a render field with tiered rendering guidance - check it before composing your reply.

checkpoint

End-of-session bookend to get_session_start. Call when the user says 'checkpoint', 'let's checkpoint', or 'wrap up this session'. Returns the ordered checkpoint procedure for the agent to execute (summarize, capture repo changes as commit links, store the record, propose task candidates, write the handoff doc) plus the exact memory call to make and the previous checkpoint for continuity. This tool does not write anything itself - the agent performs the steps. Pass the project tag so the previous checkpoint can be loaded; if omitted, ask the user which project before storing.

get_project_history

Chronological timeline of stored memories for a single project. Use to review how a project has progressed over time, to answer 'where did we leave off', or to assemble a project narrative. Defaults to checkpoint entries (kind='checkpoint'); pass kind='all' to include every memory for the project. Ordered newest-first. This is the chronological companion to memory_recall, which is semantic and ranked. Response includes a render field with tiered rendering guidance - check it before composing your reply.

get_last_checkpoint

Retrieve the caller's most recent checkpoint to show it or resume from it. Call when the user asks to see or pick up their last checkpoint (e.g. 'what was my last checkpoint', 'show me where I left off', 'pick up from my last checkpoint'). Pass project ONLY when there is resolvable context (an active project, a #tag, or a project unambiguously named in the conversation); omit it to search across ALL projects - do not infer a project to fill the gap. author defaults to 'me' (created_by = you); pass 'anyone' only on explicit team wording. intent defaults to 'show' (return the checkpoint to display); pass intent='resume' to pick up the work - on resume into a genuinely ambiguous target the tool returns a conflict to disambiguate rather than guessing. Response includes a render field with tiered rendering guidance - check it before composing your reply.

create_playbook

Create a new reusable playbook template. A playbook is an ordered set of steps run against a customer to automate project setup. Add steps with add_playbook_step after creation.

update_playbook

Update a playbook's name, slug, or description. Only provided fields are changed. Steps are not affected — use update_playbook_step for those.

remove_playbook

Remove a playbook by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Run history is preserved in both cases. Tasks already created by previous runs are not affected.

add_playbook_step

Add an ordered step to a playbook. Steps are either 'native_task' (created in Founders OS when the playbook runs) or 'external_action' (instructions returned for the AI to execute via connected MCP tools like GitHub or Slack). All text fields support {{placeholder}} syntax. Steps are ordered by order_index; append by using a value higher than existing steps.

list_playbooks

List all defined playbooks for this company. Returns name, slug, description, and step count. Archived playbooks are hidden by default.

get_playbook

Fetch a single playbook with its full ordered step list and connector requirements. Use before running to inspect what the playbook will do and which connectors it needs.

run_playbook

Execute a playbook against a customer. Set preflight_only: true to inspect connector requirements and step breakdown WITHOUT executing — use this to check what's needed before committing to a run. In normal mode: creates all native_task steps as Founders OS tasks (linked to the customer) and returns external_action steps as structured instructions. IMPORTANT: After this tool returns in normal mode, check external_actions and execute each one using the appropriate connected MCP tools. If a connector is unavailable, create a native task using the fallback_task field from that step instead. The response always includes connector_requirements so you know what to check before executing.

get_playbook_run

Fetch the execution log and status of a specific playbook run.

list_playbook_runs

List playbook execution history. Optionally filter by playbook or customer.

update_playbook_step

Update any fields on a playbook step. Only provided fields are changed. Use to refine a step's title, description, due_offset, assigned_to, or action params.

remove_playbook_step

Remove a step from a playbook by archiving (hides from step list, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Tasks already created by previous runs are not affected.

create_project

Register a new project. Auto-creates a #-prefixed tag in the tag registry. Returns a conflict if a project with the same slug already exists. If the user mentions starting or working on a project that doesn't exist in the registry, suggest creating it. Example triggers: 'I'm starting a new project called X', 'working on project X', 'let's kick off X.' Always confirm before creating.

list_projects

List registered projects. Defaults to active projects only. Returns task counts per project (queried by tag). Also flags any #-prefixed tags in the registry that don't have a corresponding project record.

get_project

Get a full project card: project details, associated tag, and all tasks/customers carrying the project's tag. Tasks are grouped by status with recent items shown.

update_project

Update a project's name, description, or status. Name changes trigger a tag rename with propagation conflict if the tag is in use. Status change to 'completed' or 'archived' triggers a conflict if tasks with the project's tag are still open.

remove_project

Remove a project by archiving (sets status to 'archived', recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. The project's tag is kept in the registry on archive. On delete, the project record and its registry tag are removed but tasks/customers keep the tag string in their arrays (orphaned). Run history referencing this project is preserved.

restore_item

Restore a previously archived or soft-deleted item back to active state. Works for any entity type that supports archiving or deletion: customer, contact, task, tag, playbook, playbook_step, project, financial_account, financial_category, financial_transaction. Soft-deleted items are automatically purged after 30 days - restore before then to recover. Permission rules: org-scoped items can be restored by any company member; personal-scoped items (tasks) can only be restored by the creator or system owner.

list_deleted

List recently soft-deleted items (the recoverable trash) for the current company so the user can pick one to restore or permanently delete. Returns each item's type, a human-readable label, when it was deleted, and the date it will be auto-purged. Defaults to the last 7 days with leftover demo fixtures hidden; pass days to widen the window, entity_type to filter, or include_demo to show demo data. Each item carries entity_id for use with restore_item or purge_item - present items to the user by label, never by id. Response includes a render field with tiered rendering guidance - check it before composing your reply.

purge_item

Permanently and irreversibly delete a soft-deleted item (purge it from the trash, skipping the 30-day recovery window). Only operates on items that are already soft-deleted - it refuses items that are still active. On the first call it returns a confirmation conflict; pass resolution: "confirm" only after the user explicitly agrees, or "cancel" to abort. Cascades to child rows the database cascades (e.g. a customer's contacts and interactions). To recover an item instead of destroying it, use restore_item.

purge_items

Permanently and irreversibly delete many soft-deleted items at once (batch purge from the trash). Provide either an explicit `items` list (entity_type + entity_id pairs, e.g. gathered from list_deleted) OR filters: entity_type, older_than_days, only_demo (leftover demo/test fixtures), or all. On the first call it returns a confirmation conflict summarizing how many items of each type will be destroyed; pass resolution: "confirm" only after the user explicitly agrees. Only ever touches already-soft-deleted items; cascades to child rows the database cascades. Use restore_items to recover instead.

restore_items

Restore many soft-deleted items at once (batch recover from the trash). Provide either an explicit `items` list (entity_type + entity_id pairs) OR filters: entity_type, older_than_days, or all. Restores are reversible - you can delete the items again - so this executes directly and returns a summary of what was recovered. Use purge_items to permanently delete instead.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "founders os": {
            "founders-os": {
                "command": "npx",
                "args": [
                    "-y",
                    "@ourthinktank/founders-os@latest"
                ],
                "env": {
                    "SUPABASE_URL": "https://your-project.supabase.co",
                    "SUPABASE_SECRET_KEY": "sb_secret_...",
                    "FOUNDERS_OS_COMPANY_ID": "your-company",
                    "FOUNDERS_OS_USER_ID": "your-name",
                    "FOUNDERS_OS_TIMEZONE": "America/Los_Angeles",
                    "EMBEDDING_PROVIDER": "openai",
                    "EMBEDDING_MODEL": "text-embedding-3-small",
                    "EMBEDDING_DIM": "1536",
                    "OPENAI_API_KEY": "sk-..."
                }
            }
        }
    }
}

McpServers

{
    "founders-os": {
        "command": "npx",
        "args": [
            "-y",
            "@ourthinktank/founders-os@latest"
        ],
        "env": {
            "SUPABASE_URL": "https://your-project.supabase.co",
            "SUPABASE_SECRET_KEY": "sb_secret_...",
            "FOUNDERS_OS_COMPANY_ID": "your-company",
            "FOUNDERS_OS_USER_ID": "your-name",
            "FOUNDERS_OS_TIMEZONE": "America/Los_Angeles",
            "EMBEDDING_PROVIDER": "openai",
            "EMBEDDING_MODEL": "text-embedding-3-small",
            "EMBEDDING_DIM": "1536",
            "OPENAI_API_KEY": "sk-..."
        }
    }
}

Founders OS is an open-source MCP server that puts your whole business inside Claude, Cursor, or any MCP client. It connects CRM, financials, tasks, and long-term memory behind one server, so you can ask a single question that reads across all of them. Example: "Which clients are behind on payment, and when did we last talk to them?" gets answered live, because the CRM and the ledger share the same context.

It is self-hosted and deploy-it-yourself. Your customer list, revenue, and unpaid invoices stay in your own Supabase. No middleman backend, no SaaS holding your data. stdio transport, MIT licensed, 100% open source.

Built by OurThinkTank for founders and small teams who are tired of re-explaining their company to an AI every session.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.