devrecall
DevRecall is a local-first, privacy-focused MCP server that gives AI coding tools (Claude Code, Cursor, Codex, etc.) memory of your developer activity, stored in a local SQLite database. It aggregates activity from Git, GitHub/GitLab/Bitbucket, Slack, Google Calendar, Jira/Linear, and Confluence.
Track & Log Activity
Automatically collects commits, PRs/MRs, reviews, issues, Slack messages, meetings, ticket transitions, Confluence pages, and more
Manually log decisions, conversations, and notes with people/topic tags
Query & Search
List activities by time window, source, type, or person
Count and aggregate activities (group by source, type, identity, day, or week)
Keyword search (FTS5 full-text) or semantic/vector similarity search for vague queries
Fetch full content and metadata for a specific activity by ID
Understand Work Context
Find all activities sharing a ticket key (commits, PRs, pages, etc.)
Look up work by a specific person with optional keyword and date filters
Surface recent decisions (ADRs, RFCs, decision-tagged notes)
Meeting Prep
Get event details and each attendee's recent activity for an upcoming meeting
Reports & Summaries
Access pre-built daily, weekly, monthly, or quarterly summaries
Utilities
Resolve person identities (Git authors, Slack users, etc.)
Get current UTC time to anchor relative date references like "last week"
Collects pull requests, reviews, issues, and comments from Bitbucket.
Collects pages, blogposts, and comments you authored from Confluence.
Collects commits, branch activity, and changed files from local Git repositories.
Collects pull requests, reviews, issues, and comments from GitHub.
Collects merge requests, reviews, issues, and comments from GitLab.
Collects meetings attended, organized, and declined from Google Calendar.
Collects issue transitions, comments, and sprint membership from Jira.
Collects issue transitions, comments, and sprint membership from Linear.
Collects messages and threads you participated in from Slack.
DevRecall
Your developer activity, aggregated on-device. No cloud sync. No telemetry. Your data never leaves your machine.
DevRecall pulls from Git, Slack, Google Calendar, Jira, Linear, Confluence, GitHub/GitLab/Bitbucket, Notion, and your Claude Code sessions; stores it in a local SQLite database; and turns it into standups, weekly reports, brag docs, and a chat that actually knows what you worked on.
Also ships an MCP server —
any MCP-compatible coding tool (Claude Code, Cursor, Codex, Continue, Zed)
can spawn it as a stdio subprocess and gain memory of everything you've
shipped. /devrecall:recall what auth bug did I fix in February returns
cited commits, PRs, and tickets inline.
📚 docs.devrecall.dev — install, configure, integrations, CLI reference.
Why
Local-first. SQLite on your laptop. Tokens in
~/.devrecall/tokens/(0600). The Cloudflare Worker relay is a pass-through for OAuth callbacks only — it never sees your data.LLM-optional. Bundled embeddings run offline (ONNX +
all-MiniLM-L6-v2). Use local Ollama for chat, or bring your own OpenAI/Anthropic key.Open source. MIT-licensed. Audit it, fork it, build it from source.
Related MCP server: total-agent-memory
Sources
Source | What gets collected |
Git (local) | Commits, branch activity, files changed |
GitHub / GitLab / Bitbucket | PRs/MRs, reviews, issues, comments |
Slack | Your messages, threads you participated in |
Google Calendar | Meetings attended, organized, declined |
Jira / Linear | Issue transitions, comments, sprint membership |
Confluence | Pages, blogposts, and comments you authored |
Notion | Pages you created or edited |
Claude Code | Coding-agent sessions, linked to repo & branch |
Install
macOS — desktop app + CLI:
brew install --cask pavelpilyak/devrecall/devrecallInstalls DevRecall.app and puts the devrecall CLI on your PATH.
Linux / WSL — CLI and MCP server (no desktop app):
brew install pavelpilyak/devrecall/devrecall-cliWithout Homebrew, grab the tarball directly:
curl -L https://github.com/pavelpilyak/devrecall/releases/latest/download/devrecall-linux-x86_64.tar.gz \
| tar xz && sudo mv devrecall-linux-x86_64 /usr/local/bin/devrecallSupported on Ubuntu 22.04+ and equivalent (Debian 12+, Fedora 35+).
Windows — no native build. Everything except the desktop app runs under WSL using the Linux instructions above, including the MCP server, which your editor can spawn across the WSL boundary.
git clone https://github.com/pavelpilyak/devrecall.git
cd devrecall
make build # → bin/devrecallRequires Go 1.22+ with CGO enabled (for SQLite FTS5).
Then connect a source and generate your first standup:
devrecall auth github # or: slack, google, jira, linear, notion, gitlab, bitbucket
devrecall standupFull install + setup walkthrough at docs.devrecall.dev/install.
Development
make build # bin/devrecall
make test # tests with race detector
make lint # golangci-lintBuild tags: fts5 enables SQLite full-text search; GO enables hugot's pure
Go ONNX backend for embeddings.
The desktop app (Tauri + Svelte) lives in desktop/;
the OAuth callback relay (Cloudflare Worker) in relay/.
Contributing
Bug reports and collector contributions are especially welcome. See CONTRIBUTING.md.
Security
SECURITY.md for responsible disclosure.
Available Tools
17 toolscount_activitiesA
Count activities in a time window, optionally grouped by source, type, identity, day, or week. The primitive behind 'how many', 'how often', and 'compare X vs Y' questions.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Exclusive end (RFC3339 or YYYY-MM-DD) | |
| type | No | ||
| start | No | Inclusive start (RFC3339 or YYYY-MM-DD) | |
| source | No | ||
| group_by | No | Optional grouping. Empty means just return the total. | |
| identity_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as idempotency, side effects, or safety. Since it involves counting, it is likely read-only, but this is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The purpose is stated first, followed by a helpful metaphor. Ideal length for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and moderate complexity, the description covers core functionality but lacks details on return format, pagination, or rate limits. Adequate for simple counting but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%. The description adds meaning by explaining grouping options and the time window for start/end, but does not elaborate on source, type, or identity_id beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool counts activities in a time window with optional grouping by source, type, identity, day, or week. It distinguishes itself from siblings like list_activities by focusing on aggregate counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains it is the primitive for 'how many', 'how often', and 'compare X vs Y' questions, providing clear context for when to use it. However, it does not explicitly exclude scenarios or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
current_timeA
Return the current time, in the user's local timezone and in UTC. Prefer today for date filters — it is the user's local calendar date, which is what 'today' means to them.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses key behavior: it returns the current time in both the user's local timezone and UTC. It also adds context about the meaning of 'today' for the user. It does not specify the exact output format, but for a zero-parameter clock tool this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose ('Return the current time') and followed by a useful heuristic. No redundant wording; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is complete: it states what is returned, the timezone scope, and provides practical guidance about 'today' for date filters. An agent has enough information to decide when and how to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline for this dimension is 4. The description cannot add parameter meaning because no parameters exist, and the 'Prefer `today`' note provides relevant usage context without being tied to any parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return the current time', and clarifies the exact output scope: user's local timezone and UTC. There is no ambiguity with sibling tools, which are all activity/person-oriented, so the tool is immediately distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: use this tool for current time, but 'Prefer `today` for date filters' because it represents the user's local calendar date. This tells the agent when to use this tool versus relying on a more appropriate construct, going beyond merely naming the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activityA
Fetch the full activity row (including content and metadata) for a given activity ID. Use after list_/search_ to drill into a specific row.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It indicates a read operation (fetch), but doesn't disclose permissions, rate limits, or side effects. Adequate but minimal for a simple fetch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the main action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description adequately covers purpose, usage context, and return nature. Could add a note about single-row return, but good overall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one integer parameter 'id' with no schema description. Schema coverage is 0%. The description does not elaborate on the parameter beyond 'activity ID', missing details like format, source, or validity constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the full activity row for a given ID, including content and metadata. It distinguishes from siblings by specifying it's for drill-down after list/search operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after list_/search_ to drill into a specific row', providing clear context for when to use this tool. Does not explicitly state when not to use, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_summaryA
Fetch a single pre-built summary by period type and start date. Returns null if no summary exists for that period.
| Name | Required | Description | Default |
|---|---|---|---|
| period_type | Yes | ||
| period_start | Yes | YYYY-MM-DD start date of the period |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description covers return of null if not found, but does not explicitly state read-only nature or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no waste. Efficiently communicates essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with two params and no output schema; description covers purpose and return type but lacks usage guidance. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%; description only restates 'period type and start date' without adding meaning beyond schema. Enum and format are already clear from schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Fetch a single pre-built summary by period type and start date' with specific verb and resource, and distinguishes from sibling 'list_summaries'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'list_summaries' or other search tools. Lacks context for when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_itemA
Fetch a work item (a ticket or PR and everything linked to it) with its full cross-source timeline: the ticket, its commits, PRs, reviews, and discussions in chronological order. The best tool for 'show me everything about PROJ-123'.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Work item ID (alternative to key) | |
| key | No | Work item key: a ticket key like PROJ-123, or a pr:... key from list_work_items | |
| limit | No | Max timeline activities to return (default 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Implies a read-only fetch operation but does not disclose permissions, error handling, rate limits, or whether the operation is safe. Adequate for a simple read but lacks explicit behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core purpose, no filler. Every word earns its place. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so the description should specify return structure. It mentions 'full cross-source timeline' and lists components, but lacks details on response format (e.g., chronological order, pagination). Sufficient to understand purpose but not fully complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 3 parameters (id, key, limit). The tool description adds no extra meaning beyond the schema; e.g., it doesn't clarify the relationship between id and key or the formatting of key. Baseline score appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it fetches a work item with a full cross-source timeline, listing specific components (ticket, commits, PRs, reviews, discussions) and providing an example ("show me everything about PROJ-123"). Differentiates from siblings like list_work_items and get_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends the tool for comprehensive lookups with 'The best tool for "show me everything about PROJ-123"'. Lacks explicit when-not-to-use or alternative tool references, but the usage scenario is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_activitiesA
List activities in a time window with optional source/type/person filters. Returns shallow rows (no body); use get_activity to fetch full content.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Exclusive end (RFC3339 or YYYY-MM-DD) | |
| tag | No | Filter by enrichment tag, e.g. feature, bugfix, refactor, review, testing, docs, deploy, release, incident, planning, discussion, decision, meeting, dependency, security, performance, status-change | |
| type | No | Filter by activity type: commit, message, meeting, ticket, review, pull_request, merge_request, issue, note | |
| limit | No | Max rows to return (default 50) | |
| start | No | Inclusive start (RFC3339 or YYYY-MM-DD) | |
| offset | No | Number of leading rows to skip | |
| source | No | Filter by source: git, slack, calendar, github, gitlab, bitbucket, jira, confluence, linear, manual | |
| identity_id | No | Filter by identity (person) ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the key behavioral trait of returning shallow rows (no body). It does not cover pagination, ordering, default time window, or any authentication or rate limits, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently deliver the core purpose and key behavior, with no extraneous information. Front-loaded with action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, no output schema, and no annotations, the description covers the main purpose and key limitation (shallow rows) but lacks details on return format, pagination, or defaults. It is adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context that 'start' and 'end' define a time window and that filters are optional, but does not provide significant additional meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'list', the resource 'activities', and the scope 'in a time window with optional filters'. It distinguishes from sibling tool 'get_activity' by noting that it returns shallow rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance to use 'get_activity' for full content, implying this tool is for overviews. However, it does not mention alternatives like 'search_activities' or conditions when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_identitiesA
List people known to the system (Git authors, Slack users, etc.), optionally filtered by a name/email substring.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional case-insensitive substring filter on name/email |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the filter behavior but does not disclose pagination, response format, or whether identities are limited to specific sources. For a straightforward listing tool, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the action, no wasted words. Efficiently communicates the core functionality and optional filter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple (1 optional param, no output schema), the description doesn't mention return format. For completeness, it should indicate it returns a list of identity objects. Current description is adequate but leaves a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds little beyond the schema (it repeats the filter concept). Baseline is 3 for high coverage; no additional semantic enrichment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool's purpose with a specific verb ('List') and resource ('people known to the system'), and provides concrete examples (Git authors, Slack users). It implicitly distinguishes from sibling tools like 'resolve_person' which likely focuses on a single identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. With many sibling tools (e.g., resolve_person, search_activities), an agent could benefit from direction such as 'Use this to browse all identities; for detailed info on a specific person use resolve_person.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_summariesA
List pre-built periodic summaries (daily/weekly/monthly/quarterly). Prefer these over re-summarizing raw activities when answering 'summarize my Q1' or 'what happened last week'.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | ||
| start | No | ||
| period_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a read-only list operation but does not explicitly state safety, pagination, ordering, or what happens when no summaries exist. The behavioral details are minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. Every word adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 4 parameters without descriptions, the tool description is adequate for a simple list tool but incomplete. It lacks details on parameter formats, behavior, and output format, though it effectively distinguishes from siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for period_type by listing the enum values, but provides no format or syntax for start, end, or limit parameters. The examples hint at date ranges but are insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'pre-built periodic summaries', explicitly naming the period types (daily/weekly/monthly/quarterly). It distinguishes from sibling tools like get_summary by advising to prefer this over re-summarizing raw activities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool (for periodic summaries like 'summarize my Q1' or 'what happened last week') and implies when not to (over re-summarizing raw activities). This provides clear context for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_work_itemsA
List work items (tickets/PRs with their linked activity), most recently active first. The structural answer to 'what was I working on last week' — each item groups a ticket with its commits, PRs, and discussions. Use get_work_item for the full timeline of one item.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Only items active before this date | |
| limit | No | Max items to return (default 25) | |
| query | No | Substring match on key or title | |
| start | No | Only items active on/after this date (RFC3339 or YYYY-MM-DD) | |
| status | No | Filter by status, e.g. Done, In Progress, In Review |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses ordering and grouping behavior. It implies read-only usage but does not discuss rate limits or authentication; however, for a list tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first explains purpose and ordering, second provides context and alternative. No wasted words, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and moderate sibling count, the description adequately explains what is returned and when to use it. Could mention pagination implications of limit, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add meaningful information beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists work items (tickets/PRs with linked activity) ordered by most recent activity, and distinguishes it from the sibling get_work_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides use case ('what was I working on last week') and directs to get_work_item for more detail on a single item, guiding correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_eventA
Record a manual note — a decision, in-person conversation, observation, or anything else worth remembering. Stored as type=note from source=manual and indexed alongside everything else. Use this when the user dictates context you want recallable later.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags for filtering later | |
| text | Yes | The note body. First line (truncated to 200 chars) becomes the title. | |
| people | No | Names/emails of people referenced in the note |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. Discloses side effects (stored as note type, indexed) and a behavioral detail (first line becomes title). Lacks info on auth, rate limits, or potential destruction, but for a simple write tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the core action and followed by usage guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple write tool with three parameters and no output schema, the description covers purpose, usage, and storage behavior. Could mention return value or confirmation, but the note indexing detail provides sufficient feedback expectation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three params. Description adds extra value by explaining that the first line of 'text' becomes the title (truncated to 200 chars), which is not in the schema. Tags and people descriptions in schema are sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specifies a concrete action ('Record a manual note') with clear resource ('note') and differentiators (type=note, source=manual). Distinguishes itself from sibling tools which are predominantly read/search operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when the user dictates context you want recallable later.' Does not state when not to use or name specific alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prep_meetingA
Brief for a calendar meeting: returns the event details plus each attendee's recent shipped activity. Look up by activity_id if known, otherwise by date+title_contains. Use this to walk into a 1:1 or sync knowing what everyone's been doing.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD when activity_id is unknown — find the meeting that day matching title_contains | |
| activity_id | No | Calendar activity ID, if you already have it (from list_activities source=calendar) | |
| lookback_days | No | How far back to fetch each attendee's recent activity (default 30) | |
| title_contains | No | Substring filter on meeting title when looking up by date | |
| per_person_limit | No | Max activities per attendee (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool 'returns' data, implying a read-only operation, but does not explicitly confirm no side effects, authentication needs, or rate limits. It covers what it does but lacks depth on behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the core functionality, and the second provides lookup guidance and use case. No wasted words, front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, the description covers the main purpose, lookup modes, and use case. It is missing details about the return format or edge cases like empty results, but it is sufficient for an agent to understand when and how to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the conditional relationship between activity_id and date+title_contains (use one or the other), which is not captured in the schema. The description also reinforces the purpose of lookback_days and per_person_limit, though those are already described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns event details plus each attendee's recent shipped activity, which is a specific verb-resource combination ('Brief for a calendar meeting'). It distinguishes from siblings like get_activity or list_activities by combining multiple data sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit lookup strategies (by activity_id vs date+title_contains) and a clear use case ('walk into a 1:1 or sync'). It does not explicitly state when not to use this tool versus alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_decisionsA
Find decision-shaped activity in a date range: manual notes (type=note) merged with anything whose title or body hits decided/decision/RFC/ADR. Use this before answering 'what did we decide about X' or composing a quarterly summary.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | Max rows (default 50) | |
| start | No | ||
| source | No | Optional source filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains that the tool merges manual notes and contextual hits, but does not disclose whether it is read-only, idempotent, or any auth/rate-limit constraints. For a query tool, this is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences that pack the purpose, examples, and usage guidance. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description explains the concept of results (decision-shaped activity) but does not detail the exact return fields. For a moderate-complexity tool with 4 parameters, it covers the essential context. It could be improved by mentioning result structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (start and end lack descriptions). The description adds context about the date range but does not specify format (e.g., ISO 8601). It compensates partially by explaining the overall purpose, but does not add significant meaning beyond the schema for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds decision-shaped activity in a date range, specifying it merges manual notes and content matching keywords like 'decided' or 'RFC'. It distinguishes itself from sibling tools like search_activities by focusing on decision-related content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: before answering 'what did we decide about X' or composing a quarterly summary. It does not explicitly state when not to use it, but provides clear context for its application.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_personA
Resolve a name or email to a single identity (the closest match). Returns the matched identity or null if no candidate is found.
| Name | Required | Description | Default |
|---|---|---|---|
| name_or_email | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: returns closest single match, and returns null if no candidate. However, it does not mention authentication needs, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. Purpose, process, and result are stated efficiently and clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set and no output schema, the description covers input, behavior, and output completely. It is sufficient for an agent to understand and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage for the single parameter 'name_or_email'. The description adds meaning by stating it accepts a name or email and resolves to an identity, but does not specify format requirements or if partial/fuzzy matching is supported.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Resolve' and resource 'name or email to a single identity', distinguishes from sibling 'list_identities' by implying a single match, and specifies the return value (identity or null).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for matching a single identity from a name/email, but does not explicitly state when to use this tool vs alternatives like 'list_identities' or 'who_worked_on'. It lacks exclusion criteria or prerequisite conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_activitiesA
Hybrid search over activity titles and content, combining keyword (FTS5) and semantic similarity. This is the default search tool — it handles both concrete phrases like 'retry strategy' and loosely-worded queries, so prefer it unless you specifically need pure vector similarity.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| tag | No | Filter matches by enrichment tag (e.g. bugfix, decision, incident) | |
| limit | No | ||
| query | Yes | Keywords to search for in titles and content | |
| start | No | ||
| source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses the hybrid matching mechanism (FTS5 keyword plus semantic similarity) and the breadth of query handling, which is useful behavioral context. It does not detail result ranking or pagination, but the core search behavior is transparently described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The mechanism is front-loaded, followed by a decision rule. Every sentence contributes useful information for tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, low schema coverage, no annotations, and no output schema, the description is not complete enough. It provides strong orientation but leaves optional-filter semantics and return-value expectations underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, and the description does not compensate. It clarifies the query semantics implicitly but does not explain start, end, limit, or source meaning or format. The agent is left to guess for four of six parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Hybrid search over activity titles and content'. It further distinguishes itself from the sibling semantic_search_activities by declaring that this is the default tool unless pure vector similarity is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit usage rule: prefer this tool by default, and provides a clear when-not condition: use it unless you specifically need pure vector similarity. It also notes the tool handles both concrete and loosely-worded queries, helping an agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_search_activitiesA
Pure vector similarity search over activities. search_activities already blends this with keyword matching, so reach for this only when that returns nothing useful and the query is purely conceptual with no reliable keywords. Returns shallow rows ranked by similarity.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | ||
| query | Yes | ||
| start | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds useful context about the pure vector nature and the shallow, similarity-ranked results, but it does not explicitly state that this is read-only, nor does it clarify what "shallow rows" include or whether any side effects exist. Some safety information is left to inference from the word "search."
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose, immediately contrasts the tool with search_activities, and then gives the usage condition and result type. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description does a strong job on purpose and usage context, and it names the correct sibling alternative. However, without an output schema or parameter-level description, an agent still has to infer the meaning of start/end/limit and what "shallow rows" actually contain. This is adequate but leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the missing parameter meanings. It provides semantic context for the query concept but does not explain start, end, or limit. The parameter names are suggestive, but the description adds no concrete details beyond what the schema already shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "Pure vector similarity search over activities." It clearly distinguishes itself from the sibling search_activities by noting that the sibling blends vector and keyword matching, and it describes the output as "shallow rows ranked by similarity."
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: reach for this only when search_activities returns nothing useful and the query is purely conceptual with no reliable keywords. It names the alternative and provides a clear exclusion condition, leaving no ambiguity about when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
who_worked_onA
Activities authored by a specific person, optionally narrowed by a keyword query and date range. Pass identity_id if you have one (from list_identities/resolve_person); otherwise pass name_or_email and the tool resolves it.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | Max rows (default 50) | |
| query | No | Optional keyword to narrow within this person's activity | |
| start | No | ||
| source | No | ||
| identity_id | No | Identity ID; if unknown, pass name_or_email instead | |
| name_or_email | No | Resolved via identity table when identity_id is not given |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It reveals the resolution behavior for name_or_email but does not discuss performance, pagination, error handling, or the nature of the response. Adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core purpose is front-loaded, followed by parameter resolution guidance. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param tool with no output schema and many siblings, the description covers the main idea but misses details on date range format, source usage, and result structure. Leaves some uncertainty for complex queries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 57% (4 of 7 params described). The description adds meaning for identity_id and name_or_email (resolution advice) but does not explain start, end, or source parameters. Falls short of full compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Activities authored by a specific person', using a specific verb and resource. It distinguishes from siblings like search_activities and resolve_person by focusing on person-scoped activity retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on when to use identity_id vs name_or_email, and references list_identities/resolve_person. Does not explicitly exclude alternative tools or scenarios, but the context is sufficient for basic usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v0.1.23- Added
get_work_item - Changed
list_activities1 field changed- added
Input schema / properties / tagAdded value: +{ + "description": "Filter by enrichment tag, e.g. feature, bugfix, refactor, review, testing, docs, deploy, release, incident, planning, discussion, decision, meeting, dependency, security, performance, status-change", + "type": "string" +}
- Added
list_work_items - Changed
search_activities1 field changed- added
Input schema / properties / tagAdded value: +{ + "description": "Filter matches by enrichment tag (e.g. bugfix, decision, incident)", + "type": "string" +}
15 tool updates
v0.1.0- First observed
count_activities - First observed
current_time - First observed
get_activity - First observed
get_related_activities - First observed
get_summary - First observed
list_activities - First observed
list_identities - First observed
list_summaries - First observed
log_event - First observed
prep_meeting - First observed
recent_decisions - First observed
resolve_person - First observed
search_activities - First observed
semantic_search_activities - First observed
who_worked_on
TDQS
Most tools have clearly distinct purposes—search, list, count, drill-down, and work-item aggregation are separated well. The main overlaps are get_related_activities vs get_work_item, and search_activities vs semantic_search_activities, but the descriptions provide enough guidance to choose correctly.
The core set follows a consistent verb_noun snake_case pattern like list_activities, count_activities, and resolve_person. A few names deviate—who_worked_on, recent_decisions, current_time, and the abbreviated prep_meeting—but the overall style remains readable and predictable.
At 17 tools, this is slightly above the ideal 3-15 range, but the server covers a broad domain spanning activity search, work items, people, summaries, and meeting prep. Most tools earn their place and support distinct workflows rather than padding the surface.
The read/query surface is strong: search, list, count, drill-down, person resolution, work-item aggregation, and pre-built summaries cover the main recall workflows. The notable gap is that log_event supports creating manual notes but there is no update or delete path, and there is no explicit metadata tool for enumerating sources or types.
Maintenance
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
Portable memory for AI agents: capture once, recall across Claude, Cursor, and any MCP client.
Hosted MCP memory: save sessions/decisions once, search from Claude, Cursor, ChatGPT. EU-hosted FTS.
Shared memory for AI coding agents. Save once, reuse from Cursor, Claude Code, Codex.
Related MCP Servers
- AlicenseAqualityAmaintenanceShared, code-grounded memory for developers and their coding agents. Capture a learning once and the whole team plus every agent recalls it; memory is grounded in your code and stored as git-tracked JSON reviewed in PRs, with citations validated on write and stale memory withheld from recall. Works with any MCP client.1132GPL 3.0
- AlicenseNot gradedqualityAmaintenancePersistent, local memory for AI coding agents that learns how you work, not just what you said. Supports Claude Code, Codex CLI, Cursor, and any MCP client.67MIT
- AlicenseAqualityAmaintenanceSemantic codebase search + persistent working memory for AI code editors. Local, zero-config, MCP. No API key.8232MIT
- AlicenseBqualityAmaintenanceLocal-first, auditable memory for Codex, Claude Code, and MCP clients. It stores scoped user/project memory in SQLite or Postgres, serves read-only recall and inspection tools by default, and supports opt-in governed writeback with review and forget controls.826217MIT
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/pavelpilyak/devrecall'
If you have feedback or need assistance with the MCP directory API, please join our Discord server