WhenLabs/When
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| velocity_start_taskA | Start a timer for a discrete coding task and, when historical data is available, return a duration estimate derived from similar past tasks. When to use: before starting any distinct unit of work — a bug fix, a feature, a refactor, a test-writing pass. Use one task per logical unit; do not batch unrelated changes under a single task. Always pair with Side effects: inserts a new row into the local SQLite database at ~/.velocity-mcp/tasks.db (override via HOME). Computes a best-effort duration prediction by querying historical rows of the same category/tags; predictions run locally and are cached per-task. Federated upload is disabled unless the user has explicitly opted in via Returns: JSON with |
| velocity_end_taskA | Stop a task timer started with When to use: immediately after finishing — or abandoning — any task started with Side effects: updates the task row in ~/.velocity-mcp/tasks.db with end timestamp, duration, status, optional file/line counts, and any telemetry passed in. Shells out to Returns: JSON with |
| stale_scanA | Detect documentation drift — find places in README.md, CHANGELOG.md, and other project markdown where the docs reference commands, flags, APIs, or files that the code no longer matches. When to use: before tagging a release, after large refactors or renames, when onboarding a new contributor, or as a periodic health check. Set Side effects: reads all markdown files and source files reachable from the project root (respecting .gitignore). Never writes, auto-fixes, or moves files — this is a pure reporting tool. Returns: plain-text, JSON, or markdown report listing each drifted section with file:line references and a one-line explanation of the mismatch (e.g. "README references --deep flag removed in src/cli.ts:42"). Exit 1 if any drift is found. |
| envalid_validateA | Validate a project's .env files against its envalid schema — catch missing required variables, type mismatches, and values outside allowed ranges. When to use: before booting the app locally, during CI, after a teammate adds a new required env var, or when switching between development and production configs. Pass Side effects: reads .env, .env.local, and .env.{environment} from the project root, and reads the envalid schema (typically src/env.ts or a similar file exporting Returns: plain-text, JSON, or markdown report listing each declared variable, whether it is present, whether its value matches the expected type, and any schema-level validation errors with file:line references. Exit 1 on any validation failure. |
| berth_checkA | Scan a project for port conflicts between ports declared in common dev-server config sources (.env files, package.json scripts, docker-compose.yml, devcontainer.json, Procfile, Makefile, framework defaults, and a project-local .berthrc) and ports currently listening on the host. When to use: before running Side effects: enumerates listening TCP ports on the host via platform-appropriate commands (lsof on macOS/Linux, netstat on Windows) and inspects running Docker containers for published ports. Reads only the config files listed above; never opens, closes, or binds any ports. No network I/O beyond local loopback checks. Returns: plain-text (or JSON) report listing each configured port, whether it is free or in use, and — for occupied ports — the PID and process name of the holder. Exit 1 when a conflict is detected, 0 otherwise. |
| aware_syncA | Detect the project's tech stack and regenerate AI context files (CLAUDE.md, .cursorrules, .windsurfrules, AGENT.md) from the project's .aware.json config. When to use: after adding or removing a framework/language, when AI context files fall out of date, or when onboarding a new agent to the repo. Do not call on every turn — run once per session or after stack changes. Side effects: reads package.json, requirements.txt, pyproject.toml, go.mod, Cargo.toml, and similar manifest files to detect the stack. Writes or overwrites CLAUDE.md, .cursorrules, .windsurfrules, and AGENT.md in the project root based on .aware.json templates. Never modifies source code. Returns: plain-text summary listing the detected stack, the files written (or that would be written, in dry-run mode), and any errors. Exit 0 on success, non-zero on failure. |
| vow_scanA | Scan all dependency licenses in a project and — if a policy file is present — validate each package against that policy, flagging disallowed licenses (e.g. GPL in a proprietary codebase) or packages with unknown licenses. When to use: before shipping a release, when adding a new dependency, during compliance or legal review, or as a CI gate. Set Side effects: reads supported lockfiles (package-lock.json or npm-shrinkwrap.json for Node; Cargo.lock for Rust; requirements.txt with hashes, uv.lock, or poetry.lock for Python) plus local node_modules / vendor manifests to resolve license strings. Pnpm, yarn, and go are not yet supported — vow exits with a clear error when only those lockfiles are present. Read-only; no network requests. Returns: plain-text, JSON, or markdown summary of package → license mapping grouped by license family (MIT/Apache/BSD/GPL/unknown), with per-package links. Exit 1 if any dependency violates the policy or has an unknown license, 0 otherwise. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
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/WhenLabs-org/when'
If you have feedback or need assistance with the MCP directory API, please join our Discord server