Follow-Through
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DATA_DIR | No | Writable volume for the JSON store. Falls back to temp dir, then in-memory. | <cwd>/data |
| LLM_PROVIDER | No | Provider selection: `auto` | `anthropic` | `openrouter` | `none`. In `auto` mode, uses Anthropic if its key is set, else OpenRouter if its key is set, else the offline deterministic extractor. | auto |
| LINEAR_API_KEY | No | Enables real Linear ticket lifecycle. | |
| LINEAR_TEAM_ID | No | Linear team ID for ticket creation. Auto-detected if omitted. | |
| ANTHROPIC_MODEL | No | Claude model to use for extraction. | claude-sonnet-4-6 |
| EMAIL_IMAP_HOST | No | IMAP host for searching email evidence. | |
| EMAIL_IMAP_PASS | No | IMAP password for searching email evidence. | |
| EMAIL_IMAP_USER | No | IMAP username for searching email evidence. | |
| EMAIL_SMTP_HOST | No | SMTP host for sending email nudges. | |
| EMAIL_SMTP_PASS | No | SMTP password for sending email nudges. | |
| EMAIL_SMTP_USER | No | SMTP username for sending email nudges. | |
| SLACK_BOT_TOKEN | No | Enables real Slack evidence search + DM nudges. Requires scopes: channels:read, groups:read, channels:history, groups:history, im:history, users:read, users:read.email, chat:write. | |
| OPENROUTER_MODEL | No | Free OpenRouter model for extraction. | meta-llama/llama-3.1-8b-instruct:free |
| ANTHROPIC_API_KEY | No | Enables Claude-based extraction (paid). | |
| OPENROUTER_API_KEY | No | Enables free-tier OpenRouter extraction. | |
| SCHEDULER_INTERVAL_MS | No | Real-world poll cadence in milliseconds for the scheduler. | 3600000 |
| SLACK_EVIDENCE_CHANNELS | No | Comma-separated list of Slack channel names or IDs to search for evidence. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tasks | {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
}
}
} |
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": true,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| extract_commitmentsA | Parses a meeting transcript and returns structured commitment objects: who promised what, to whom, by when, and with what confidence. For every commitment found it immediately creates a durable store record AND a Linear ticket — catching the 90% of commitments that would never become a manual ticket. Deduplicates against commitments already in the store. |
| get_sample_transcriptA | Returns a ready-to-use sample meeting transcript (with participants and meeting date) designed to exercise all three confidence levels — paste its transcript_text into extract_commitments to run the demo flow. |
| upsert_commitmentB | Creates or updates a commitment record in the durable store. The store is the source of truth for every commitment lifecycle state. |
| query_commitmentsA | Returns commitments matching a filter — used by the scheduler to find items due for a poll or nudge check. With no filters, returns every commitment. |
| promote_commitmentA | Promotes a logged aspirational commitment ("we should probably...") so the scheduler starts actively chasing it. This is the human override that moves an idea into the follow-up loop. |
| search_slack_evidenceA | Searches Slack for messages that could constitute evidence a commitment was fulfilled. Returns raw candidate messages; the verification agent scores them semantically rather than trusting keyword hits. |
| search_email_evidenceA | Searches a mocked inbox/sent-items store for emails relevant to a commitment — e.g. mail sent to an external beneficiary that proves the work shipped. |
| send_nudgeA | Sends a contextual reminder to the commitment owner via Slack or email, referencing the original commitment language and deadline. Tone calibration: gentle first, specific second, urgent only on hard blockers. |
| linear_create_ticketA | Creates a Linear ticket for a newly extracted commitment so it's never lost — even commitments nobody manually ticketed. Keys stay server-side in the Linear service; this tool never exposes them to the model. |
| linear_get_statusA | Reads the current status of a Linear ticket — used by the scheduler to verify work marked Done in Linear, not just in Slack/email. |
| linear_update_statusB | Updates the status of a Linear ticket. Lets the scheduler pick up a ticket manually marked Done. |
| linear_escalateB | Adds a manager as a watcher on the ticket with a supportive, context-rich comment explaining what was promised, what has been tried, and why it is being surfaced now. |
| simulate_days_passingA | Advances the internal clock by N days and runs one scheduler poll. This is the demo control that makes a week of chasing observable in seconds. In production the scheduler polls itself on a real interval (SCHEDULER_INTERVAL_MS) — this tool exists so the full open → nudge → escalate lifecycle can be shown live. |
| reset_demoA | Wipes the commitment store, ticket store, and resets the virtual clock to today. Use this to restart the demo scenario cleanly. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Health Checks | Current health status of all registered health checks |
| Commitment Dashboard | UI component for Commitment Dashboard |
| Widget Examples | Provides metadata and examples for all registered UI widgets |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ionfwsrijan/FollowThrough'
If you have feedback or need assistance with the MCP directory API, please join our Discord server