Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SUPABASE_URLYesSupabase project URL (required)
EMBEDDING_DIMNoEmbedding dimension (must match database schema dimension)
OPENAI_API_KEYNoOpenAI API key (required if EMBEDDING_PROVIDER=openai)
EMBEDDING_MODELNoEmbedding model, uses provider default if omitted
OLLAMA_BASE_URLNoOllama server URL (required if EMBEDDING_PROVIDER=ollama)
AWS_ACCESS_KEY_IDNoAWS access key ID for Bedrock (optional, uses default AWS credential chain if omitted)
AWS_DEFAULT_REGIONNoAWS region for Bedrock (optional, used if EMBEDDING_PROVIDER=bedrock)
EMBEDDING_PROVIDERNoEmbedding provider: openai, bedrock, ollama. Defaults to 'openai'
FOUNDERS_OS_USER_IDNoUser identifier for personal scopes, defaults to 'default'
SUPABASE_SECRET_KEYYesSupabase secret key (required)
FOUNDERS_OS_TIMEZONENoTimezone used by date-aware tools, e.g. 'America/Los_Angeles'
AWS_SECRET_ACCESS_KEYNoAWS secret access key for Bedrock (optional)
FOUNDERS_OS_COMPANY_IDNoCompany identifier for scoping data, defaults to 'default'

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
pingB

Test tool — returns pong. Update available: running v0.14.0, latest v1.4.0. Restart with @latest to update.

get_versionA

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_guideA

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_capabilitiesA

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_demosA

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_customerA

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_customerA

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

update_customerC

Update fields on an existing customer record.

search_customersA

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

list_customersA

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_customerA

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_contactB

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

update_contactC

Update a contact's details.

search_contactsA

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_contactA

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_interactionA

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

list_interactionsB

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

remove_interactionA

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_dashboardA

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_taskA

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_taskA

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

update_taskA

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_taskA

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_taskB

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_tasksA

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_taskA

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_taskA

Remove a specific entity link from a task.

list_entity_tasksC

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

add_task_noteA

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

assign_taskA

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_summaryA

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_tagsA

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_tagsA

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_tagA

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_tagA

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_tagA

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_storeB

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_recallA

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

memory_forgetA

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_updateA

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_storeA

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_transactionA

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_transactionsB

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_customerA

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_categoryB

Create an income or expense category.

list_categoriesC

List all financial categories, optionally filtered by type.

add_accountA

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

list_accountsA

List all capital accounts with their current balances.

transfer_between_accountsA

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_reportA

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_transactionA

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_summaryB

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_accountA

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_categoryA

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_accessA

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_accessA

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_logA

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_membersA

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_memberA

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_ownerA

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_memberA

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_feedA

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_feedA

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_feedsA

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_feedA

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

unpin_feedA

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_feedsA

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_feedsA

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_itemsA

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_itemA

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_itemA

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_bookmarksA

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

remove_bookmarkA

Remove a saved bookmark by its ID.

get_feed_briefingA

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_cardA

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_startA

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_retroA

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_listA

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.

checkpointA

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_historyA

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.

create_playbookA

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_playbookA

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

remove_playbookA

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_stepA

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_playbooksA

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

get_playbookA

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_playbookA

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_runB

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

list_playbook_runsC

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

update_playbook_stepB

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_stepA

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_projectA

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_projectsA

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_projectA

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_projectA

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_projectA

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_itemA

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_deletedA

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_itemA

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_itemsA

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.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/OurThinkTank/founders-os'

If you have feedback or need assistance with the MCP directory API, please join our Discord server