Skip to main content
Glama
YOLKINS
by YOLKINS

weeek-mcp

Local, read-only-by-default MCP server for Weeek — with opt-in write tools.

npm version npm downloads CI License: MIT MCP

Русская версия README

weeek-mcp connects AI clients (Claude Desktop, Claude Code, Cursor, MCP Inspector) to your Weeek workspace over stdio. It is read-only by default — a default install can list projects, tasks, boards, members and tags but change nothing — and exposes five write tools only when you opt in with READ_ONLY=false. Runs on Node ≥ 20; install with npx, no clone or build required.

Why this one

  • On npm. npx -y weeek-mcp works today — no clone, no build, no absolute paths.

  • Read-only by default, with composable gates. Writes are simply not registered unless you opt in; ENABLED_TOOLS whitelists a subset and MAX_RESPONSE_CHARS caps every payload. Server-side, not client convention.

  • Bilingual. Full EN ↔ RU documentation parity.

  • Granular error model. Nine distinct error codes with agent-readable messages, so a model knows when to retry versus give up without parsing prose.

Related MCP server: todoist-mcp

Quickstart

The recommended install path is npx — no clone, no build. Drop examples/claude_desktop.mcp.json into your MCP client config, replace YOUR_WEEEK_TOKEN_HERE with a real token from https://app.weeek.net/ws/_/settings/apps/api, and restart the client:

{
  "mcpServers": {
    "weeek": {
      "command": "npx",
      "args": ["-y", "weeek-mcp"],
      "env": {
        "WEEEK_ACCESS_TOKEN": "YOUR_WEEEK_TOKEN_HERE"
      }
    }
  }
}

npx downloads weeek-mcp on first launch and caches it. Cursor and Cline use the same mcpServers shape — see examples/cursor.mcp.json and examples/cline.mcp.json. Other env vars have safe defaults; override only what you need (see Configuration). If npx cannot find node (typical with nvm), see Troubleshooting; for a zero-dependency smoke test see docs/smoke.md.

examples/ lives on GitHub only — the npm tarball ships dist/ + README.md + README.ru.md + LICENSE.

Tools

Ten read tools are exposed by default. All fifteen appear only under READ_ONLY=false (see Enabling write tools).

Read tool

Returns

ping

pong: <msg> — transport health check, no API call, no token

weeek_get_me

the authenticated user (id, email, name) — confirms the token

weeek_list_projects

every project visible to the token

weeek_get_project

a single project by id, including its description

weeek_list_tasks

one page of tasks (filters + offset/per_page pagination)

weeek_get_task

a single task by id, with multi-assignee fields

weeek_list_members

every workspace member

weeek_list_tags

every tag

weeek_list_boards

every board in a project

weeek_list_board_columns

every column of a board, in sort order

Write tool (READ_ONLY=false)

Does

weeek_complete_task

flips the completion flag; completed: false re-opens

weeek_move_task

moves a task to a board column (a column is a status)

weeek_create_task

files a new task and returns it with its new id

weeek_update_task

edits title / priority / type / due date

weeek_set_task_mr_link

records a merge/pull-request URL in a custom field

Full field-level reference (inputs, outputs, edge cases, truncation, multi-assignee) → docs/tools.md.

Enabling write tools

The default install cannot change anything in your workspace. All five mutating tools are hidden behind READ_ONLY (default true) — not registered, so they never appear in tools/list. Setting READ_ONLY=false takes tools/list from ten tools to fifteen and lets the agent create, edit, move and complete tasks in the workspace the token can reach. There is no server-side confirmation step — annotations are a hint an MCP client is free to ignore. Point the token at a workspace whose contents you are willing to see changed.

"env": {
  "WEEEK_ACCESS_TOKEN": "YOUR_WEEEK_TOKEN_HERE",
  "READ_ONLY": "false"
}

Start with one tool, not five. READ_ONLY=false intersected with ENABLED_TOOLS gives you writes on, but only the one you asked for:

"env": {
  "WEEEK_ACCESS_TOKEN": "YOUR_WEEEK_TOKEN_HERE",
  "READ_ONLY": "false",
  "ENABLED_TOOLS": "weeek_complete_task"
}

READ_ONLY is the outer gate: naming a write tool in ENABLED_TOOLS does not by itself opt into writes. The allowlist is not additive, so list the read tools you need alongside it — examples/claude_desktop.write.mcp.json is a ready-to-edit config that does exactly that.

What each write tool can and cannot do

Tool

Changes

Undone by

destructiveHint

idempotentHint

weeek_complete_task

one completion flag

re-firing with completed: false

false

true

weeek_set_task_mr_link

one custom field's value

re-setting it

false

true

weeek_move_task

the task's board column (and board)

moving it back — if you know where it was

true

false

weeek_update_task

title / priority / type / due date

re-setting each field — if you know the old value

true

false

weeek_create_task

files a new task

deleting it, which this server cannot do

true

false

The three true rows are marked "worth a human confirm" because the agent never saw the old value and cannot put it back; weeek_create_task is the one to watch — its effect cannot be undone through this server, and a retried create files a second task. weeek_set_task_mr_link resolves its custom field by name unless you pass custom_field_id / custom_field_name — the matched names and ambiguity rules are in docs/tools.md.

Configuration

Read from the environment at startup and validated with zod; invalid values abort startup on stderr with a non-zero exit code. The server never reads a .env file itself — pass variables through your MCP client's env block or your shell.

Variable

Required

Default

Purpose

WEEEK_ACCESS_TOKEN

yes

Personal Weeek API token (≥ 20 chars; placeholders and whitespace-padded values are rejected).

WEEEK_BASE_URL

no

https://api.weeek.net/public/v1

Base URL for the Weeek HTTP client. Override for self-hosted proxies.

WEEEK_TIMEOUT_MS

no

30000

Per-request timeout (ms). Positive integer.

READ_ONLY

no

true

Hide write tools. When true, any tool whose readOnlyHint !== true is not registered. Accepts true/false/1/0.

ENABLED_TOOLS

no

(unset = all)

Comma-separated allowlist of tool names, still intersected with READ_ONLY. Unknown names WARN; an empty result aborts startup.

MAX_RESPONSE_CHARS

no

65536

Byte budget per response; over-budget payloads are clipped and flagged truncated: true. Min 1024, max 1000000.

LOG_LEVEL

no

info

Logger threshold: debug, info, warn, error. Unknown values fall back to info.

Both gates run server-side: a hidden tool is not registered, so an agent cannot call it. READ_ONLY is load-bearing — leave it at the default unless you intend an agent to change your workspace. See .env.example for a copy-pasteable template.

Troubleshooting

Symptom

Likely cause

Fix

Server doesn't appear in the client

command points at a node the client cannot find, or dist/index.js is missing/non-executable

Run npm run build; confirm ls -la dist/index.js shows 0755. Use the absolute path from which node (see NVM note below).

MCP server failed to start immediately

Same as above, plus node_modules missing

Run npm install && npm run build from the repo root.

invalid env: WEEEK_ACCESS_TOKEN: ... on stderr

Token contains whitespace/control chars, or is the placeholder

Generate a real token at https://app.weeek.net/ws/_/settings/apps/api and paste it without surrounding spaces or newlines.

invalid env: WEEEK_BASE_URL: ...

URL uses a non-http(s) scheme or contains user:pass@

Use plain https://api.weeek.net/public/v1; route credentials through WEEEK_ACCESS_TOKEN.

EACCES launching dist/index.js

postbuild chmod skipped

chmod +x dist/index.js.

npm start works but the client fails

The client launches under a different PATH than your shell

See the NVM workaround below.

Claude Desktop and Cursor launch their MCP subprocess under a non-interactive shell that does not source ~/.nvm/nvm.sh, so a bare "command": "npx" silently fails when Node is installed via nvm. Either hard-code an absolute path — run which npx and paste the result as command (update it whenever you switch nvm version); the package is still downloaded and cached on first run:

{ "command": "/Users/<you>/.nvm/versions/node/v20.18.0/bin/npx", "args": ["-y", "weeek-mcp"] }

— or point command at a small wrapper script that sources ~/.nvm/nvm.sh before exec npx "$@", which survives nvm version changes.

Errors

Every Weeek tool fails the same way: isError: true with a single-line <tool> failed (<weeek_code>): <one English sentence>. The weeek_<code> token is the stable, machine-greppable contract; the sentence guides self-correction. Nine codes cover unauthorized / forbidden / not-found / validation / rate-limit / server / network / timeout / invalid-response, each with retry guidance.

weeek_get_task failed (weeek_not_found): Weeek returned 404 for this resource. Verify the id exists in the configured workspace and was not deleted.
weeek_list_tasks failed (weeek_rate_limited): Weeek rate-limited the request (HTTP 429). Retry after a brief delay or reduce the call frequency.

Full table with retry semantics → docs/errors.md.

Contributing · Security · License

  • Contributing — issues and feature requests are welcome; pull requests are by prior agreement (this repo runs a strictly linear increment process). See CONTRIBUTING.md.

  • Security — found a way to leak the token or a byte on stdout? Do not open a public issue; see SECURITY.md for the private channel and threat model.

  • LicenseMIT.

  • For AI coding agents — the entry-point contract (invariants, pinned deps, pre-merge checklist) lives in CLAUDE.md.

CONTRIBUTING.md, SECURITY.md and CLAUDE.md live on GitHub only — like examples/, they are not in the npm tarball. LICENSE is the exception: it ships inside the package.

Available Tools

10 tools
pingHealth checkA
Read-onlyIdempotent

PRIMARY tool for connection sanity-check: returns 'pong: '. DISTINCT from weeek_get_me — ping makes NO Weeek API call (no token required, no network), so it stays green even when WEEEK_ACCESS_TOKEN is missing or expired. Use when the agent first connects to verify the MCP transport itself is alive before reaching for any weeek_* tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
msgYesMessage to echo back

Output Schema

ParametersJSON Schema
NameRequiredDescription
replyYes'pong: <msg>'

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavior beyond annotations: 'makes NO Weeek API call (no token required, no network)', explaining why it works even with a missing or expired token. This aligns with the readOnlyHint and idempotentHint annotations, adding useful context about auth and network independence.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: purpose, distinction from siblings, and usage guidance. All content is relevant and front-loaded, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers the tool's behavior, usage context, and edge cases (missing token). The tool is simple, and the description is complete given the schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes msg as 'Message to echo back', and the description adds how it appears in the output: 'returns pong: <msg>'. This enriches the parameter semantics without being verbose, exceeding the 100% schema coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'PRIMARY tool for connection sanity-check: returns pong: <msg>'. It also distinguishes itself from siblings by explicitly stating it makes no Weeek API call, unlike weeek_get_me.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'Use when the agent first connects to verify the MCP transport itself is alive before reaching for any weeek_* tool.' Also contrasts with weeek_get_me, clarifying when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_get_meCurrent Weeek userA
Read-onlyIdempotent

PRIMARY tool for confirming WEEEK_ACCESS_TOKEN works against the live API. Returns {id, email, name} for the Weeek account that owns the configured token. DISTINCT from ping (which never reaches the network) — a successful weeek_get_me proves both transport AND credentials. Use when an agent is about to run weeek_list_* / weeek_get_* and wants a one-shot token sanity-check first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesStable Weeek user identifier
nameYesDisplay name of the authenticated Weeek user
emailYesEmail address of the authenticated Weeek user

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds behavioral context by noting the tool makes a live network call and 'proves both transport AND credentials,' which is beyond what annotations express. It does not describe failure modes but the output schema covers the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences, front-loaded with 'PRIMARY tool for confirming' which immediately conveys the main purpose. Each sentence adds distinct value: purpose, return shape, and usage distinction. No redundant or extraneous wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema present), the description covers the essential context: what it does, when to use it, and how it differs from ping. The return values are also summarized even though an output schema exists. There are no significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema coverage is complete at 100%. Per the baseline for zero-parameter tools, a score of 4 is appropriate since the description does not need to elaborate on parameter meaning. The description's non-mention of parameters is fine.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is the PRIMARY tool for confirming WEEEK_ACCESS_TOKEN works against the live API and returns {id, email, name} for the account owning the token. It explicitly distinguishes from sibling ping, making the tool's unique purpose and resource unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly provides guidance on when to use the tool: 'Use when an agent is about to run weeek_list_* / weeek_get_* and wants a one-shot token sanity-check first.' It also contrasts with ping, stating that ping never reaches the network, thus giving an explicit alternative and exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_get_projectGet one Weeek projectA
Read-onlyIdempotent

PRIMARY tool for fetching a single Weeek project's full detail by id, including description ({id, title, description, color, isPrivate}). DISTINCT from weeek_list_projects, which returns summaries only ({id, title, color, isPrivate}) without descriptions and without support for fetching by id. Use when you already know the project id (from weeek_list_projects or the Weeek UI) and need the description or want to confirm a single project still exists. Unknown ids surface as weeek_get_project failed (weeek_not_found).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesWeeek project identifier (from list_projects or the Weeek UI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesStable Weeek project identifier
colorYesHex or named accent color
titleYesProject title
isPrivateYesTrue if the project is private
truncatedYesTrue if the response was clipped by the server's MAX_RESPONSE_CHARS gate. Only `description` is clipped (other fields are fixed-shape); raise MAX_RESPONSE_CHARS in the server env to receive the full text.
descriptionYesProject description (nullable). May end with the marker '…[truncated]' if the response hit MAX_RESPONSE_CHARS — see the truncated field.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While annotations already declare read-only and idempotent behavior, the description adds the error behavior for unknown ids (weeek_get_project failed / weeek_not_found) and confirms the returned object includes the description. This supplements the annotations with valuable operational context, and no contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place: the first states the primary function and return shape, the second differentiates from the sibling list tool, and the third gives usage and error guidance. It is front-loaded with 'PRIMARY tool' and wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with an output schema, rich annotations, and sibling context, the description covers purpose, usage, differentiation, and failure mode. Nothing critical is missing for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the single parameter (project_id) with its source and constraints, and schema coverage is 100%. The description reuses this information but adds no new semantic detail beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it fetches a single project's full detail by id and lists the exact return fields ({id, title, description, color, isPrivate}). It explicitly distinguishes itself from weeek_list_projects, which returns summaries only, making the scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Use when you already know the project id... and need the description or want to confirm a single project still exists.' It names the alternative (weeek_list_projects) and explains its limitations, providing clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_get_taskGet one Weeek taskA
Read-onlyIdempotent

PRIMARY tool for fetching a single Weeek task by task_id ({id, title, description, completed, projectId, priority, type}). DISTINCT from weeek_list_tasks — this is the only tool that returns the full description field. Use when an agent already has a specific id and needs full details; unknown ids surface as weeek_get_task failed (weeek_not_found): ….

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesWeeek task identifier (from weeek_list_tasks or the Weeek UI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesStable Weeek task identifier
typeYesTask type (action | meet | call)
titleYesTask title
userIdYesUUID of the primary assignee (Weeek member id, matches weeek_list_members.id). Null if the task is unassigned.
priorityYesPriority code (commonly 0=Low, 1=Medium, 2=High, 3=Hold), or null when no priority is set. The range is not guaranteed by the API.
assigneesYesUUIDs of every assignee on the task (matches weeek_list_members.id). Empty if the task is unassigned; includes userId on assigned tasks.
completedYesWhether the task is completed
projectIdYesOwning project id
truncatedYesTrue if the response was clipped by the server's MAX_RESPONSE_CHARS gate. Only `description` is clipped (other fields are fixed-shape); the agent can re-issue with raised MAX_RESPONSE_CHARS in the server env to see the full text.
descriptionYesTask description (nullable). May end with the marker '…[truncated]' if the response hit MAX_RESPONSE_CHARS — see the truncated field.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it specifies that this is the only tool returning the full description field, and describes the error format for unknown ids (weeek_not_found). This enriches the agent's understanding of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it opens with the primary purpose, followed by a distinct sibling differentiation, usage guidance, and error behavior. No word is wasted, and all key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter), rich annotations, and presence of an output schema, the description is complete. It covers purpose, usage, sibling distinction, return fields, and error behavior—enough for an agent to select and invoke the tool correctly without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage for the single parameter task_id, with a clear description of where to obtain it (from weeek_list_tasks or the Weeek UI) and a minimum constraint. The tool description itself does not add additional parameter-level semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a single Weeek task by task_id, lists the returned fields, and explicitly distinguishes itself from weeek_list_tasks by being the only tool that returns the full description field. This makes the purpose unambiguous and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance: 'Use when an agent already has a specific id and needs full details.' It also names the alternative (weeek_list_tasks) and explains the error behavior for unknown ids, giving clear decision-making context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_list_board_columnsList Weeek columns for a boardA
Read-onlyIdempotent

PRIMARY tool for board-column discovery: returns every column of a Weeek board ({id, name, boardId} per column) in upstream sort order (preserved verbatim — the array order is the signal). board_id is required. Use when the agent needs a board's column/stage layout, e.g. to interpret a task's status or drive a board view.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_idYesWeeek board identifier (from weeek_list_boards or the Weeek UI). Required — `/tm/board-columns` returns HTTP 422 without it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
truncatedYesTrue if the response was clipped by the server's MAX_RESPONSE_CHARS gate. Re-issue with a narrower board_id or raise MAX_RESPONSE_CHARS in the server env to receive the full payload.
boardColumnsYesColumns belonging to the requested board. Array order is the upstream sort signal — preserved verbatim (no `position` / `sortOrder` field).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds useful context: returns all columns in upstream sort order and emphasizes that 'the array order is the signal.' This goes beyond annotation hints and clarifies a key behavioral trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and information-dense. The first sentence states purpose and return shape, the second adds usage context. The parenthetical return shape detail might be slightly redundant with the output schema, but it serves immediate comprehension. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one clearly documented parameter and an output schema present, the description covers all necessary context: what the tool returns, ordering significance, required parameter, and when to use it. It is fully sufficient for the agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with board_id fully documented including source and error behavior. The description only repeats 'board_id is required,' which adds no new meaning. Baseline 3 is appropriate since the schema carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'PRIMARY tool for board-column discovery' and explicitly states it 'returns every column of a Weeek board' with a clear return shape. This verb+resource combination clearly distinguishes it from sibling tools like weeek_list_boards or weeek_list_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit use-case guidance: 'Use when the agent needs a board's column/stage layout, e.g. to interpret a task's status or drive a board view.' It also labels itself as 'PRIMARY tool' for this purpose, implying precedence over alternatives, though it does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_list_boardsList Weeek boards for a projectA
Read-onlyIdempotent

PRIMARY tool for board discovery within a project: returns every Weeek board in the given project ({id, name, projectId, isPrivate} per board). project_id is required; pagination is not exposed by this endpoint. Use when the agent needs a board_id to feed into weeek_list_board_columns, or to surface the board picker for a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesWeeek project identifier (from weeek_list_projects or the Weeek UI). Required — `/tm/boards` returns HTTP 422 without it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
boardsYesBoards belonging to the requested project
truncatedYesTrue if the response was clipped by the server's MAX_RESPONSE_CHARS gate. Re-issue with a narrower project_id or raise MAX_RESPONSE_CHARS in the server env to receive the full payload.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds that the endpoint returns all boards, lists the per-board fields, and explicitly states pagination is not exposed—useful behavior beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, includes essential usage and limitation info without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter list tool with a rich schema and annotations, the description covers discovery, usage, return shape, and limitations, making it nearly self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description covers project_id 100% with origin and HTTP 422 error detail. The description only restates that project_id is required, adding no new semantic information, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states it returns every Weeek board in the given project, lists the fields, and positions itself as the PRIMARY tool for board discovery, distinguishing it from siblings like weeek_list_board_columns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage direction: use when a board_id is needed to feed into weeek_list_board_columns or to surface the board picker. Also notes project_id is required and pagination is not exposed, giving context on limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_list_membersList Weeek workspace membersA
Read-onlyIdempotent

PRIMARY tool for member discovery: returns every member of the configured Weeek workspace ({id, email, firstName, lastName} per member). DISTINCT from weeek_get_me — that returns the caller; this returns every workspace participant. Member id is a string (unlike most Weeek resources). Use when an agent needs to resolve a name/email to a member id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
membersYesWorkspace members visible to the configured Weeek account
truncatedYesTrue if the response was clipped by the server's MAX_RESPONSE_CHARS gate. Re-issue with stricter filters or raise MAX_RESPONSE_CHARS in the server env to receive the full member list.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful context beyond this: output fields ({id, email, firstName, lastName}) and that member id is a string 'unlike most Weeek resources,' which is non-obvious and behaviorally relevant. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: primary purpose plus output structure, sibling distinction, and a concrete use case with ID type note. No redundancy, 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list operation with comprehensive annotations and an output schema, the description covers what an agent needs: scope (all workspace participants), distinguishing from the self endpoint, and the string-typed member id. Complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has zero parameters, so baseline is 4. The description adds no parameter-specific meaning, but none is needed; it focuses on output and usage, which is appropriate for a parameterless endpoint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States it is the 'PRIMARY tool for member discovery' and 'returns every member of the configured Weeek workspace' with specific fields. Explicitly distinguishes from weeek_get_me, which returns the caller. Clear verb+resource with sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use case: 'Use when an agent needs to resolve a name/email to a member id.' Explicitly names weeek_get_me as a distinct alternative and explains the difference ('returns the caller' vs 'every workspace participant'). Clear when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_list_projectsList Weeek projectsA
Read-onlyIdempotent

PRIMARY tool for project discovery: returns every Weeek project visible to the configured token ({id, title, color, isPrivate} per project). No filters; pagination is not exposed by this endpoint. Use when the agent needs a project_id to feed into weeek_list_tasks or to surface the project picker to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectsYesAll projects visible to the configured Weeek account
truncatedYesTrue if the response was clipped by the server's MAX_RESPONSE_CHARS gate. Re-issue with stricter filters (smaller per_page, narrower project_id) or raise MAX_RESPONSE_CHARS in the server env to receive the full payload.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/destructive properties. The description adds context about token-visible scope, per-project fields, and the absence of pagination, which goes beyond the annotations and adds valuable behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with purpose, including usage and limitations. No redundant information; every sentence contributes meaningfully.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list operation with an output schema and comprehensive annotations, the description fully covers purpose, usage, and limitations. It includes return field details and integration with related tools, leaving no critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the baseline is 4. The description explains 'No filters' which clarifies why the schema is empty and confirms no input is needed, adding meaning beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'returns every Weeek project visible to the configured token' and lists per-project fields. It distinguishes itself from siblings by being the 'PRIMARY tool for project discovery' and by referencing use with weeek_list_tasks, making it distinct from weeek_get_project or list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Use when the agent needs a project_id to feed into weeek_list_tasks or to surface the project picker to the user.' It also notes limitations: 'No filters; pagination is not exposed,' providing clear when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_list_tagsList Weeek tagsA
Read-onlyIdempotent

PRIMARY tool for tag discovery: returns every tag defined in the configured Weeek workspace ({id, title, color} per tag). No pagination. Use when an agent needs to map a user-supplied tag name to a stable tag id (Weeek tasks reference tags by id).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagsYesAll tags defined in the workspace
truncatedYesTrue if the response was clipped by the server's MAX_RESPONSE_CHARS gate. Re-issue with stricter filters or raise MAX_RESPONSE_CHARS in the server env to receive the full tag list.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond annotations: 'No pagination' (meaning all results returned at once) and the exact fields per tag. This helps the agent understand what to expect without relying solely on the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences front-load the primary purpose and then specify the exact output and usage. Every word earns its place—no filler, no repetition of the title or annotations, and the structure is easily scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters), the presence of an output schema, and the strong annotations, the description covers all essential aspects: what it returns, that it returns all tags, no pagination, and when to use it. It is complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema coverage is 100% by default (actually vacuous). The description clarifies that there is no pagination, which explains the absence of paging parameters and prevents the agent from looking for them. This is a reasonable baseline with a useful extra note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'PRIMARY tool for tag discovery' and defines the exact resource ('every tag defined in the configured Weeek workspace') with output shape ({id, title, color}). It clearly distinguishes itself from sibling list tools and explains why it exists (mapping tag names to ids).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage scenario: 'Use when an agent needs to map a user-supplied tag name to a stable tag id'. It does not explicitly name alternatives or state when not to use it, but the 'PRIMARY tool' phrasing and the distinct resource make the intended context obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weeek_list_tasksList Weeek tasksA
Read-onlyIdempotent

PRIMARY tool for task discovery and filtering: returns one page of Weeek tasks filtered by project_id / board_id / board_column_id / assignee_id / completed, paginated by offset+per_page (default 20, max 100). Use the filters to locate the card a write tool is about to act on instead of paging a whole project. DISTINCT from weeek_get_task — this returns task summaries (no description / details); fetch a single full task via weeek_get_task. Use when the agent needs a list view; follow hasMore for the next page.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset (number of items to skip)
board_idNoFilter to tasks on this board (id from weeek_list_boards). An id that does not exist is rejected as an error, not answered with an empty list.
per_pageNoPagination page size (1-100). Default 20 — sized so a single page fits comfortably under the 25k MCP-token cap that most clients use for `tools/call` responses; raise explicitly if you need a larger page and have the budget for it.
completedNoIf true, return only completed tasks; if false, only open ones
project_idNoFilter to tasks of this project
assignee_idNoFilter to tasks this member is assigned to — matches any assignee, not only the primary one (a task where the member is a secondary assignee still matches). UUID from weeek_list_members.id. A UUID that is not a member of this workspace is rejected as an error (weeek_validation_error, HTTP 422), not answered with an empty list.
board_column_idNoFilter to tasks sitting in this board column — the status filter (id from weeek_list_board_columns). Column ids are unique across boards, so this narrows on its own; board_id is not required alongside it. An id that does not exist is rejected as an error, not answered with an empty list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tasksYesTasks matching the filters
hasMoreYesTrue if more tasks exist beyond this page; call again with offset = previous offset + tasks.length
truncatedYesTrue if the response was clipped by the server's MAX_RESPONSE_CHARS gate. Independent from hasMore (pagination): truncated=true means the local byte-budget gate fired, so re-issue with smaller per_page / narrower filters or raise MAX_RESPONSE_CHARS in the server env.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds behavioral context: returns only one page, pagination via offset/per_page (default 20, max 100), returns summaries without description/details, and to follow hasMore for the next page. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with 'PRIMARY tool', then lists what it does, offers usage guidance, clarifies the distinction from weeek_get_task, and closes with pagination advice. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 7 optional parameters and an output schema, the description covers the main use case, pagination, the summary-versus-detail distinction, and the next-page mechanism. The output schema supplies return-value details, so the description is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with rich per-parameter descriptions (e.g., error behavior for invalid IDs, assignee matching semantics). The description merely restates the filter names without adding new meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states this is the PRIMARY tool for task discovery and filtering, returns one page of Weeek tasks with explicit filter parameters, and distinguishes itself from weeek_get_task (summaries vs full details). This clearly identifies the tool's function and scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use the filters to locate the card a write tool is about to act on instead of paging a whole project' and instructs to 'fetch a single full task via weeek_get_task' when details are needed, plus when a list view is required. This provides clear when-to-use and alternative guidance.

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.

  1. 10 tool updatesv1.0.0
    • First observedping
    • First observedweeek_get_me
    • First observedweeek_get_project
    • First observedweeek_get_task
    • First observedweeek_list_board_columns
    • First observedweeek_list_boards
    • First observedweeek_list_members
    • First observedweeek_list_projects
    • First observedweeek_list_tags
    • First observedweeek_list_tasks

TDQS

A4.4/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose: ping is transport-only, weeek_get_me is token verification, list vs. get variants are explicitly separated by summary vs. full detail, and each resource (projects, tasks, members, tags, boards, columns) has its own dedicated tool. No two tools overlap in what they return or act on.

Naming Consistency5/5

All weeek_* tools follow a consistent verb_noun snake_case pattern (list_projects, get_task, list_board_columns). The only exception is ping, which is a standard health-check convention and does not disrupt the pattern.

Tool Count5/5

10 tools is well within the ideal range for a focused MCP server. Each tool covers a distinct read operation for core Weeek resources, and there is no redundancy or bloat.

Completeness2/5

The server is strictly read-only: it offers list/get for projects and tasks, plus list-only for members, tags, boards, and columns, but provides no create, update, or delete operations. This severely limits real-world workflows that require modifying tasks or projects, and there are no get-by-id variants for members/tags/boards/columns.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Full-featured MCP server integrating all 71 endpoints of the Weeek API as MCP tools for AI clients, enabling task, project, and workspace management via natural language.
    3
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local-stdio MCP server for a single personal Todoist account with env-gated read-only mode and prompt-injection mitigations.
    296
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    MCP server for Personal OS API that enables managing tasks, notes, projects, collections, reviews, and more through typed tools over stdio.
    66
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for the Weeek Public API. Use it from Cursor or Claude Code to browse projects, search tasks, read attachments, and (with a browser session) load task comments.
    118
    MIT

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/YOLKINS/weeek-mcp'

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