Nexxupp MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Nexxupp MCP Serverstore in memory that I prefer async standups, then schedule one Friday"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Nexxupp MCP Server
We've introduced hosted mode: run one Nexxupp MCP server for your whole team with per-user login — no API tokens in chat configs anymore:
Easy installation via standard OAuth. Users click Connect, log in with Nexxupp, approve scopes. No need to fiddle with JSON or API tokens.
Powerful tools tailored to AI agents across three products: Cortex memory, NWS workspace, and Calendar. Descriptions carry the conventions models need (datetime format, per-user scoping), keeping token consumption low.
We are prioritizing, and actively supporting, hosted mode. Local stdio keeps working for personal use.
This project implements an MCP server for Nexxupp: private memory (Cortex), programmable workspace (NWS), and scheduling (Calendar).
Tools (22)
Prefix | Tools |
|
|
|
|
|
|
|
|
Conventions the models must follow are in each tool description: datetimes are
YYYY-MM-DD HH:MM:SS, memory calls are scoped per end-user id.
Installation
1. Get your credentials
Cortex tools need a per-tenant key (
cortex_...).NWS + Calendar tools need your Nexxupp login (email + password). The server logs in once and refreshes behind the scenes. Prefer this over a static access token (15-minute life, no refresh).
Credentials in an MCP config act as you. Keep them on personal machines — never on shared servers. On shared servers, use hosted mode below.
2. Adding MCP config to your client
Using npm
Cursor & Claude
Add the following to your .cursor/mcp.json or claude_desktop_config.json
(MacOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json)
{
"mcpServers": {
"nexxupp": {
"command": "npx",
"args": ["-y", "@nexxupp/mcp"],
"env": {
"NEXXUPP_API_URL": "https://api.nexxupp.com",
"CORTEX_API_URL": "https://api.cortex.nexxupp.com",
"CORTEX_API_KEY": "cortex_...",
"NEXXUPP_EMAIL": "you@example.com",
"NEXXUPP_PASSWORD": "..."
}
}
}
}For local development against your own stack, point at localhost:
{
"mcpServers": {
"nexxupp-local": {
"command": "node",
"args": ["/absolute/path/to/nexxupp/mcp/dist/index.js"],
"env": {
"NEXXUPP_API_URL": "http://localhost:8080",
"CORTEX_API_URL": "http://localhost:8081",
"CORTEX_API_KEY": "cortex_...",
"NEXXUPP_EMAIL": "you@example.com",
"NEXXUPP_PASSWORD": "..."
}
}
}
}Zed
Add the following to your settings.json
{
"context_servers": {
"nexxupp": {
"command": {
"path": "npx",
"args": ["-y", "@nexxupp/mcp"],
"env": {
"NEXXUPP_API_URL": "https://api.nexxupp.com",
"CORTEX_API_URL": "https://api.cortex.nexxupp.com",
"CORTEX_API_KEY": "cortex_...",
"NEXXUPP_EMAIL": "you@example.com",
"NEXXUPP_PASSWORD": "..."
}
},
"settings": {}
}
}
}GitHub Copilot CLI
Use the Copilot CLI to interactively add the MCP server:
/mcp addAlternatively, create or edit ~/.copilot/mcp-config.json and add:
{
"mcpServers": {
"nexxupp": {
"command": "npx",
"args": ["-y", "@nexxupp/mcp"],
"env": {
"NEXXUPP_API_URL": "https://api.nexxupp.com",
"CORTEX_API_URL": "https://api.cortex.nexxupp.com",
"CORTEX_API_KEY": "cortex_...",
"NEXXUPP_EMAIL": "you@example.com",
"NEXXUPP_PASSWORD": "..."
}
}
}
}Using Docker
Build the image locally (no public registry yet):
docker build -t nexxupp-mcp:0.1.0 .Then add the following to your .cursor/mcp.json or claude_desktop_config.json
{
"mcpServers": {
"nexxupp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e", "NEXXUPP_API_URL",
"-e", "CORTEX_API_URL",
"-e", "CORTEX_API_KEY",
"-e", "NEXXUPP_EMAIL",
"-e", "NEXXUPP_PASSWORD",
"nexxupp-mcp:0.1.0"
],
"env": {
"NEXXUPP_API_URL": "https://api.nexxupp.com",
"CORTEX_API_URL": "https://api.cortex.nexxupp.com",
"CORTEX_API_KEY": "cortex_...",
"NEXXUPP_EMAIL": "you@example.com",
"NEXXUPP_PASSWORD": "..."
}
}
}
}Transport options
STDIO transport (default)
The default transport uses standard input/output. This is what desktop clients like Claude Desktop and Cursor expect.
# Run with default stdio transport
npx -y @nexxupp/mcp
# Or explicitly specify stdio
npx -y @nexxupp/mcp --transport stdioStreamable HTTP transport
For web-based applications or bridged setups, run Streamable HTTP:
# Run on port 3100 (default), localhost only
npx -y @nexxupp/mcp --transport http
# Run on a custom port
npx -y @nexxupp/mcp --transport http --port 8080
# Bind to a different host. The default is 127.0.0.1.
npx -y @nexxupp/mcp --transport http --host 0.0.0.0The server answers at http://127.0.0.1:<port>/mcp. Health at /health,
dependency status at /ready, counters at /metrics.
Authentication
Local HTTP mode has no gateway auth and binds localhost by default — keep it that way. For anything shared, use hosted mode:
MCP_MODE=hosted MCP_TRANSPORT=http MCP_PORT=3100 \
MCP_PUBLIC_URL=https://mcp.nexxupp.com npm startIn hosted mode every /mcp request must carry Authorization: Bearer <user access token>. The server validates it against the backend and scopes all
nws_* / calendar_* calls to that caller — no token, or a bad token, gets
401 before any tool runs. cortex_* tools additionally accept a per-call
apiKey (the caller's own tenant key); never set a global CORTEX_API_KEY on
a shared server.
# Example request
curl -H "Authorization: Bearer <user-access-token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 1}' \
http://localhost:3100/mcpHosted setup (operator checklist)
Deploy the Docker image beside the API with
MCP_MODE=hostedandMCP_PUBLIC_URLset to its public URL.Set backend
OAUTH_API_BASE=https://api.nexxupp.comso discovery advertises reachable URLs.Register one OAuth client per bot via
POST /oauth/clientswith the bot's redirect URIs and scopes (openid profile email calendar).Users connect from the bot, approve scopes in the Nexxupp consent screen, and manage grants at
GET /oauth/consents/DELETE /oauth/consents/{client_id}(revoking kills the bot's refresh tokens immediately; access tokens expire within ~15 minutes).Point
NEXXUPP_API_URLat production, keep the default 120/min caller quota (or lower it), and alert on/metricsrate_limitedspikes — they mean an agent loop is burning someone's wallet.
Examples
Using the following instruction
Remember that Maya prefers oat-milk lattesAI will call cortex_memory_store with your user id, and the memory comes back
versioned as a brick.
Similarly, the following instruction summarizes a whole workspace
Summarize my station, including open tasks and recent pagesAI will call nws_summarize_station (listing stations first if it doesn't know
the id), and may follow up with nws_search_blocks for detail.
You may also schedule in plain language
Find us 30 minutes next week for a design reviewAI will call calendar_ai_assist, which reads the calendar and returns
executable scheduling actions.
Development
Build & test
npm install
npm run build
npm testnpm test runs 14 tests (unit + live transport/auth-matrix tests, tool-surface
snapshot, rate-limit checks; no external services required).
Execute
npm startTesting changes locally in Cursor:
Run
npm linkfrom the repository root.Merge the snippet below into Cursor's
mcp.json.(Cleanup) run
npm unlinkfrom the repository root.
{
"mcpServers": {
"nexxupp-local-package": {
"command": "nexxupp-mcp",
"env": {
"NEXXUPP_API_URL": "http://localhost:8080",
"CORTEX_API_URL": "http://localhost:8081",
"CORTEX_API_KEY": "cortex_...",
"NEXXUPP_EMAIL": "you@example.com",
"NEXXUPP_PASSWORD": "..."
}
}
}
}Publish
npm login
npm publish --access publicObservability
Logs: stderr, one line per request (
LOG_LEVEL=debug|info|warn|error).GET /readyreturns 503 while the backend is unreachable — wire alerts there, not to the container healthcheck (GET /health).Tune with
MCP_REQUEST_TIMEOUT_MS(default 60000),MCP_MAX_BODY_BYTES(default 1048576),MCP_UPSTREAM_TIMEOUT_MS(default 20000),MCP_RATE_LIMIT_MAX(default 120) andMCP_RATE_LIMIT_WINDOW_MS(default 60000) — the per-caller tool-call quota (429 +Retry-Afterwhen hit, counted asrate_limitedin/metrics).
Related MCP server: jovememory
License
MIT — see LICENSE.
Available Tools
22 toolsbilling_usageA
Check the caller's wallet before expensive runs: credit balance, tier, storage used vs quota, turns used, spend by product. Read-only; it never spends.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load — and it does disclose the trait that matters most here: 'Read-only; it never spends.' For a wallet-adjacent tool this removes the obvious agent concern about incurring cost. It stops short of stating auth requirements or whether results are cached/live, which keeps it from a 5.
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?
One sentence, front-loaded with the trigger ('before expensive runs'), then the payload list, then the safety guarantee. Every clause earns its place with no filler.
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?
With no annotations and no output schema, the description compensates by listing what the caller gets back and by asserting the read-only/no-spend property. For a zero-parameter read tool, nothing an agent needs in order to call it correctly is missing.
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 tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond the empty schema. The enumerated return fields add value that the schema cannot supply, since no output schema exists.
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?
States a specific verb and resource ('Check the caller's wallet') and then enumerates the exact data returned: credit balance, tier, storage used vs quota, turns used, spend by product. With no overlapping sibling among the listed tools, no differentiation is needed, and the enumeration makes the scope unmistakable.
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?
Gives an explicit trigger condition ('before expensive runs'), which tells the agent when to reach for this tool rather than discovering limits mid-task. There are no alternative billing tools to exclude, so the absence of a when-not clause is not a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_ai_assistB
Ask the calendar AI in plain language: schedule, reschedule, find free time, summarize. It reads the calendar and returns executable actions.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | What to do, in plain language | |
| timezone | No | IANA name, e.g. Asia/Kolkata | |
| calendarId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool 'reads the calendar and returns executable actions', clarifying that it does not itself apply mutations. It omits permission requirements, rate limits, and what happens to returned actions, so disclosure is partial.
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 tight sentences with the core capability list front-loaded and no filler. The 'plain language' idea is repeated in both the description and the message parameter, a minor redundancy that keeps it just below a 5.
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 3-parameter tool with no annotations and no output schema, the description covers purpose and the read-vs-execute distinction but leaves the return format, error behavior, and calendarId semantics unexplained. Adequate but with clear 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 coverage is 67%: 'message' and 'timezone' are documented in the schema while 'calendarId' is not. The description adds meaning only for 'message' by emphasizing plain language; it does not compensate for the undocumented calendarId or add format details for timezone, so baseline 3 is 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?
The description states a clear verb+resource: it's an AI assistant for calendar operations (schedule, reschedule, find free time, summarize) driven by plain language. The capability list is specific, but it does not explicitly contrast itself with granular siblings like calendar_create_event or calendar_update_event, so differentiation is only implicit.
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 phrase 'in plain language' implies the tool is for natural-language, multi-step, or ambiguous calendar requests, which is an implicit usage cue. However, there is no explicit when-to-use vs when-not guidance and no named alternatives among the calendar_* siblings, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_create_eventC
Create an event on a calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | Datetime as YYYY-MM-DD HH:MM:SS | |
| title | Yes | ||
| startAt | Yes | Datetime as YYYY-MM-DD HH:MM:SS | |
| isAllDay | No | ||
| location | No | ||
| timezone | No | IANA name, e.g. Asia/Kolkata | |
| calendarId | Yes | ||
| recurrence | No | ||
| description | No |
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, yet it discloses nothing about required permissions, notification/side effects, recurrence behavior, timezone defaults, or idempotency. Only the word 'Create' hints that this is a mutation.
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?
A single front-loaded sentence with no waste, but it is too thin for a 9-parameter mutation tool with a nested recurrence object. Brevity here reads as under-specification rather than discipline.
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?
With 9 parameters, a nested recurrence object, no annotations, and no output schema, the one-sentence description is far too incomplete. It leaves timezone handling, recurrence semantics, and return behavior entirely to inference.
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 only 33% (title, location, isAllDay, calendarId, description are undocumented), and the description adds no parameter meaning at all. It fails to compensate for the low coverage.
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?
States a specific verb (Create) and resource (event on a calendar), so an agent can tell what it does without opening the schema. However, it offers no differentiation from siblings like calendar_update_event or calendar_delete_event beyond the implicit verb.
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 when-to-use guidance, no prerequisites, and no mention of the alternative calendar_update_event or calendar_list_events. The agent gets zero routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_delete_eventC
Delete an event by id.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes |
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 does not say whether deletion is permanent or recoverable, how recurring events are handled, whether attendees are notified, or what permissions are required. Only the destructive verb 'delete' hints at the risk profile.
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?
A single short sentence with the action front-loaded and zero filler. It is efficient, though the brevity is partly the result of under-specification rather than disciplined editing.
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?
This is a destructive mutation with no annotations, no output schema, and no documented side effects. An agent has no information about reversibility, error behavior when the id is missing, or required scopes, which is insufficient for a deletion 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 description coverage is 0% for the single required parameter. The phrase 'by id' only echoes the property name eventId and adds no format, source, or validation detail (e.g., where the id comes from, whether it accepts recurrence ids). The description does not compensate for the coverage gap.
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?
States a specific verb (delete) and resource (event) plus the keying mechanism (by id), so an agent immediately knows what the tool does. However, it does nothing to distinguish it from the sibling calendar_update_event or to clarify scope (single event vs. recurring series).
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as calendar_update_event. The agent must infer that this is the terminal removal operation from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_list_calendarsB
List the calendars the user can access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden; 'List' plus 'the user can access' does convey a read-only, access-scoped operation. However, it says nothing about result size, pagination, or whether the primary calendar is included, which are the remaining unknowns for this call.
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?
A single front-loaded sentence with no filler or redundancy. It is appropriately sized for a zero-parameter list operation, though it could have used one more clause to add real value.
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, zero-parameter read tool with no output schema, the description is minimally adequate: it names the resource and its access scope. It does not describe what a returned calendar entry contains or how results are bounded, which leaves gaps an agent would have to discover at call time.
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 tool takes zero parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline of 4 applies since no parameter semantics are needed.
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?
States a specific verb (List) and resource (calendars) with a scope qualifier ('the user can access'). It is clear on its own, but it does not differentiate itself from the neighboring calendar_list_events, which an agent could confuse with it.
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?
There is no guidance on when to call this versus calendar_list_events or the create/update/delete siblings, and no stated prerequisites. The use case (discovering calendars before working with events) must be inferred entirely by the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_list_eventsB
List events on a calendar in a time range. Optional text search.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | Range end. Datetime as YYYY-MM-DD HH:MM:SS | |
| start | Yes | Range start. Datetime as YYYY-MM-DD HH:MM:SS | |
| search | No | ||
| calendarId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. "List" implies a non-destructive read, but nothing states result limits, ordering, pagination, or maximum range constraints, and no auth/permission requirements are mentioned.
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, zero waste, with the core action front-loaded. It is arguably too terse for a 4-parameter tool, but nothing in the text is filler.
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?
With no annotations, no output schema, and only half the parameters described, the description should do far more: it omits what search actually matches, result ordering/limits, and pagination behavior. An agent can call it, but not predict the response shape or result scope.
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/end documented with format, search/calendarId bare). The description loosely maps to the two undocumented concepts ("time range" for start/end, "Optional text search" for search) and confirms search is optional, but adds no match semantics (title vs description) or calendarId meaning.
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?
States a specific verb and resource ("List events on a calendar") plus the scoping dimension (time range), which is clear enough to separate it from calendar_create_event, calendar_update_event, and calendar_delete_event by verb alone. It does not, however, explicitly contrast itself with calendar_list_calendars, which an agent could confuse it with.
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?
Usage is implied rather than stated: the agent can infer it should call this when it needs events within a window, and "Optional text search" hints at the filtering mode. There is no explicit when-to-use/when-not guidance and no mention of the sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_update_eventC
Update an event. Only set the fields to change.
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | No | Datetime as YYYY-MM-DD HH:MM:SS | |
| title | No | ||
| eventId | Yes | ||
| startAt | No | Datetime as YYYY-MM-DD HH:MM:SS | |
| isAllDay | No | ||
| location | No | ||
| timezone | No | ||
| description | No |
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 discloses partial-update semantics ('Only set the fields to change'), which is genuinely useful, but omits permissions/auth needs, whether omitted fields are preserved vs cleared, concurrency behavior, and any reversibility notes for a mutation.
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 verb and immediately followed by the most important behavioral caveat. No wasted words, though it is arguably too terse for an 8-parameter mutation tool.
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 mutation tool with no annotations, no output schema, 8 parameters at 25% coverage, and no sibling differentiation, the description is materially under-specified. It should cover partial-update behavior in more depth, required identifiers, and any side effects.
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 25% (just the two datetime fields), leaving six parameters undocumented in both schema and description. The description's 'only set fields to change' adds partial-update intent but does not explain semantics of title, location, timezone, isAllDay, or description.
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?
States a specific verb+resource ('Update an event') that clearly identifies a mutation on a calendar event, distinguishing it from read siblings like calendar_list_events. However, it offers no differentiation from calendar_create_event or calendar_delete_event beyond the verb.
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 no when-to-use context and names no alternatives. It does not clarify when to use update vs create, nor whether the event must already exist. The only guidance is the partial-update hint 'Only set the fields to change.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cortex_memory_searchB
Hybrid recall over a user's Cortex memory. Returns ranked, cited bricks.
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Max bricks (default 5) | |
| query | Yes | Natural-language recall query | |
| apiKey | No | Your Cortex tenant key. Required on shared/hosted servers; else the server key is used. | |
| userId | Yes | End user id to recall for | |
| minScore | No | Min score (default 0.25) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the retrieval mode ('hybrid') and the shape of results ('ranked, cited'), which is real behavioral context given there is no output schema. It omits permission/tenant-key implications, result limits, and behavior on empty matches.
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 purpose and followed by return characteristics; nothing is padded. It is arguably too terse for a five-parameter retrieval tool, but as a structure judgment it is efficient.
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?
A five-parameter tool with no annotations and no output schema needs more: no guidance on when to search versus store, no note on the apiKey tenant behavior, and no indication of how empty or low-score results behave. The description covers the surface but leaves the calling decision 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 100%, so all five parameters including defaults for topK and minScore are already documented in the schema. The description adds no format, syntax, or semantic detail beyond it, so the baseline 3 applies.
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?
States a specific verb ('recall') and resource ('a user's Cortex memory'), and 'hybrid' signals the retrieval strategy (lexical + semantic). It does not differentiate itself from the sibling cortex_memory_store beyond the implicit read/write split, and 'bricks' is unexplained jargon.
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?
There is no when-to-use guidance and no alternatives named, even though cortex_memory_store is an obvious counterpart for writing memories. The agent must infer the routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cortex_memory_storeA
Store one user memory in Cortex. Returns the versioned brick. Scope every call to the end user's id.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your Cortex tenant key. Required on shared/hosted servers; else the server key is used. | |
| domain | No | Memory domain, if any | |
| userId | Yes | End user id the memory belongs to | |
| message | Yes | The fact, preference, or turn to remember | |
| sessionId | No | Session scope, if any |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the return shape ("versioned brick") and the tenant-scoping constraint, but says nothing about permissions, idempotency, or what happens on conflicting writes for a mutation tool.
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?
Three short sentences, front-loaded with the core action and then the return value and key constraint. No filler; every clause 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 5-parameter mutation tool with no annotations and no output schema, the description covers purpose, return shape, and a scoping rule. It omits mutation-specific behavior (permissions, idempotency, error cases) that an agent would want before writing memory.
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 every parameter (apiKey, domain, userId, message, sessionId) is already documented in the schema. The description only reinforces the userId scoping requirement, adding little beyond structured data.
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?
States a specific verb and resource ("Store one user memory in Cortex") and clarifies single-item scope with "one." It does not name the obvious sibling cortex_memory_search as the read counterpart, so sibling differentiation is left to inference.
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?
"Scope every call to the end user's id" gives a concrete usage constraint, but there is no explicit when-to-use/when-not or routing to cortex_memory_search vs cortex_turn. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cortex_turnC
Stateful Cortex turn over a session. Use for multi-step flows that must stay coherent.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your Cortex tenant key. Required on shared/hosted servers; else the server key is used. | |
| userId | Yes | End user id | |
| message | Yes | The user turn | |
| sessionId | No | Session to continue | |
| systemPrompt | No | System prompt override |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It conveys that state persists across turns via a session, which is useful, but says nothing about auth/tenant-key requirements, whether sessionId must be reused, mutation of stored state, or latency/rate characteristics of a stateful call.
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 tight sentences with the core purpose front-loaded and the usage hint second. Nothing is padded, though the brevity borders on under-specification for a stateful tool.
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 5-parameter stateful tool with no annotations and no output schema, the description is thin. It omits what a 'turn' returns, how sessionId ties calls together, and how it relates to the memory tools, leaving real gaps an agent needs to call it 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 description coverage is 100%, so the schema already documents all five parameters including apiKey, userId, message, sessionId, and systemPrompt. The description adds the concept of session continuity but no format, precedence, or interaction details beyond the schema, so baseline 3 applies.
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 verb-ish action ('turn' over a session) and a qualifier ('stateful'), but 'turn' is jargon that an agent must infer means 'send a message and get a model response.' It does not distinguish this tool from its closest siblings cortex_memory_store or cortex_memory_search, leaving the agent to guess which Cortex tool to pick.
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?
'Use for multi-step flows that must stay coherent' gives an implied usage context for stateful conversations, but names no alternatives and gives no when-not guidance (e.g., single-shot vs. session-based). The agent can infer some usage but must guess at the boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_apply_template_blocksC
Append template blocks to an NWS page.
| Name | Required | Description | Default |
|---|---|---|---|
| blocks | Yes | ||
| pageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Append' usefully implies existing content is preserved rather than replaced, but the description says nothing about required permissions, ordering/conflict behavior, atomicity, or what is returned after the write.
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 single sentence is front-loaded and waste-free, but at six words it is under-specified rather than concise for a tool with a nested, undocumented block payload. Brevity here reflects missing information, not economy.
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?
With no annotations, no output schema, 0% parameter coverage, and a nested array of loosely typed block objects, the description omits everything an agent needs to invoke this tool correctly. It is not complete for the complexity involved.
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% across two parameters, and the 'blocks' parameter is a structured array whose items require 'block_type' and 'sort_order' while leaving 'props', 'content', and 'parent_id' completely untyped. The description adds no meaning for pageId or for any block field, so it fails to compensate for the schema gap.
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 pairs a specific verb ('Append') with a concrete resource ('template blocks') and target ('an NWS page'), so an agent knows this is an additive write to a page. It does not explicitly distinguish itself from sibling tools like nws_search_blocks or nws_open_page_for_event, but the action is unambiguous.
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?
There is no statement of when to use this tool versus alternatives, no prerequisites (e.g. must the page exist or be open first?), and no exclusions. The one sentence gives no routing guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_create_chartC
Create a chart block on an NWS page from a data source payload.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | No | ||
| pageId | Yes | ||
| source | No | Chart data source payload | |
| parentId | No | ||
| chartType | Yes | ||
| sortOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a mutating tool. It does not state whether creation is idempotent, whether it requires page-edit permissions, how it interacts with existing blocks, or what happens on failure. 'From a data source payload' is the only behavioral hint, and it is not elaborated.
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?
A single front-loaded sentence with no filler, and the core action is stated first. It is concise, though the brevity is partly under-specification rather than disciplined editing.
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 6-parameter mutation tool with no annotations, no output schema, and 17% schema coverage, the description is far too thin. An agent cannot determine valid chart types, required source payload shape, or placement behavior before invoking it.
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 17% — just the 'source' parameter is documented. Six parameters exist (pageId, chartType, source, axis, parentId, sortOrder), and the description explains none of them, leaving chartType values, axis structure, and placement semantics (parentId/sortOrder) undocumented in both places.
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 gives a specific verb and resource: 'Create a chart block on an NWS page from a data source payload.' That is clearer than a tautology and identifies both the artifact (chart block) and its parent (NWS page). It does not, however, distinguish itself from siblings like nws_search_blocks or nws_apply_template_blocks, which also operate on NWS page blocks.
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?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites such as needing an existing page or a populated data source. The agent must infer all routing decisions from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_create_taskC
Create a task in an NWS station.
| Name | Required | Description | Default |
|---|---|---|---|
| dueAt | No | Due date as YYYY-MM-DD HH:MM:SS | |
| title | Yes | ||
| pageId | No | ||
| status | No | ||
| stationId | Yes |
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 of behavioral disclosure. 'Create' implies a mutation, but the description says nothing about required permissions, whether the call is idempotent, what defaults apply to omitted fields like status or dueAt, or what identifier is returned on success.
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?
A single front-loaded sentence with zero filler is efficient and easy to parse. Its brevity borders on under-specification rather than being bloated, so it earns credit for structure without being maximally useful.
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 five-parameter mutation tool with no annotations, no output schema, and 20% schema coverage, the description is far too thin. An agent lacks the needed detail on side effects, parameter meaning, and returned values.
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 20% (just dueAt), and the description mentions no parameters at all. With five parameters, two required, and an enum on status, the description does nothing to compensate for the undocumented schema fields.
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 names a specific verb ('Create') and resource ('a task') plus its scope ('in an NWS station'), which clearly separates it from siblings like nws_create_chart. It stops short of differentiating itself from the other NWS creation/mutation tools beyond the resource noun.
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?
There is no guidance on when to use this tool versus alternatives such as nws_create_chart or nws_apply_template_blocks, nor any stated prerequisites. An agent must infer everything from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_list_stationsB
List the NWS stations the user can access.
| 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 behavioral burden and discloses almost nothing beyond the verb. It does not state that the tool is read-only, whether pagination applies, how many stations are typically returned, or what a 'station' record contains.
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?
A single front-loaded sentence with no wasted words. Appropriate for a zero-parameter list tool.
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 trivial no-arg list tool this is minimally adequate, but with no output schema and no annotations the description gives no indication of the return shape or ordering. An agent knows what it does but not what it will get back.
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 there is no parameter semantics to document. Baseline 4 applies; nothing in the description conflicts with the empty 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?
States a specific verb (List) and resource (NWS stations) plus a scoping qualifier (the user can access). It does not reference or differentiate from siblings like nws_search or nws_summarize_station, but the purpose is unambiguous.
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?
There is no guidance on when to use this versus nws_search, nws_summarize_station, or nws_station_assist. The only hint is the implicit 'accessible stations' scope, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_open_page_for_eventC
Open (or create) the NWS page linked to a calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| eventId | Yes | ||
| stationId | Yes | ||
| templateSlug | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses a create-if-missing behavior, but does not explain permissions, side effects, idempotency, whether an existing page is reused, or what is returned.
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 one-sentence description is front-loaded and free of filler. It is concise, though its terseness contributes to the tool's overall under-specification.
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 an unannotated create/open mutation with four parameters and no output schema, the description is too thin. It states the basic purpose but omits usage conditions, parameter meaning, side effects, and return behavior.
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% for four parameters. The description only indirectly references a calendar event and an NWS page; it does not explain eventId, stationId, title, or templateSlug, so it fails to compensate for the schema gap.
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 names a specific action (open/create) and resource (NWS page linked to a calendar event). It is clear enough to distinguish from most siblings, though it does not explicitly differentiate itself from other NWS or calendar page-related tools.
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 implies the tool is used when a calendar event needs an associated NWS page, but gives no explicit when-to-use guidance, no prerequisites, and no alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_read_databaseC
Read an NWS database schema plus rows, optionally through a view.
| Name | Required | Description | Default |
|---|---|---|---|
| viewId | No | ||
| databaseId | 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 operation, but says nothing about permissions, whether rows are paginated or truncated, how large result sets are handled, or what the view path changes behaviorally.
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?
A single front-loaded sentence with no wasted words, though its brevity borders on under-specification given the tool's complexity.
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 2-parameter tool with no annotations and no output schema, the description is too thin: it doesn't clarify result scope (all rows vs. bounded), what a 'view' lookup returns, or the meaning of databaseId.
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 0%, so the description must compensate. It only vaguely hints that viewId is optional ('optionally through a view') and says nothing about databaseId or the identifier format for either 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 gives a specific verb (Read) and resource (NWS database schema plus rows), and the 'optionally through a view' clause distinguishes it from write-oriented siblings like nws_upsert_rows. It does not explicitly name or contrast with a sibling such as nws_summarize_database, so it stops short of a 5.
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?
There is no guidance on when to use this versus nws_summarize_database, nws_search, or nws_upsert_rows, and no prerequisites or exclusions are stated. Usage is only implied by the verb 'Read'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_searchB
Full-text search across NWS stations. Narrow with stationId when known.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| stationId | No |
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 of behavioral disclosure. It does not state whether the search is case-sensitive, how results are ranked, whether it searches across all stations or a subset, or what the return format looks like. 'Full-text search' is the only behavioral clue, which is insufficient.
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 action. No wasted words; the stationId hint is secondary but useful. Exactly the right size for the amount of information provided.
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?
This is a search tool with three parameters, no output schema, and no annotations. The description is far too sparse to guide correct invocation: it doesn't explain result behavior, parameter formats, default limits, or how to interpret results. It leaves most operational details to inference.
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 only implies that stationId can narrow the search, but adds no semantics for 'query' (e.g., what fields are searched, whether it supports wildcards) or 'limit' (e.g., default limit, pagination). Three parameters remain largely undocumented in both schema and description.
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: 'full-text search across NWS stations.' This distinguishes it from siblings like nws_list_stations (enumeration) and nws_search_blocks. However, it doesn't name an alternative or clarify the relationship to nws_list_stations, so it falls short of a 5.
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 phrase 'Narrow with stationId when known' implies a usage condition for that parameter, which is helpful. But there is no explicit guidance on when to use this tool vs nws_list_stations or other search-like siblings, and no exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_search_blocksC
Search page blocks inside NWS stations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| stationId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: whether results are paginated, whether the match is exact or fuzzy, whether stationId is required for meaningful results, or whether the operation is read-only are all unstated. For a search tool with zero annotation coverage this is a substantial 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?
It is a single efficient sentence with no filler, and the core action is front-loaded. The brevity, however, reflects under-specification rather than disciplined concision, so it is only minimally adequate.
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?
With three parameters at 0% schema coverage, no annotations, and no output schema, the description would need to carry meaning about inputs and behavior, and it does not. An agent cannot determine from this definition how to scope or interpret a query beyond the raw types.
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% and none of the three parameters (query, limit, stationId) are explained in the description. It does not say what query matches against, that limit caps result count (1-100), or that stationId scopes the search, so the description adds no meaning beyond the bare schema types.
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 gives a verb plus resource ("Search page blocks inside NWS stations"), so the basic action is identifiable. However, "page blocks" is unexplained jargon and the description offers no differentiation from the sibling nws_search, which an agent would reasonably assume searches the same content space.
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?
There is no indication of when to use this tool versus nws_search, nws_summarize_station, or nws_list_stations, all of which appear in the sibling list. No prerequisites or exclusions are stated, leaving routing entirely to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_station_assistB
Ask the NWS station AI to act: create/update pages, tasks, reminders, invites. Describe the goal in plain language.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | What to do, in plain language | |
| stationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It reveals that the action is a mutating, AI-mediated operation (create/update pages, tasks, reminders, invites) but says nothing about permissions required, whether actions are confirmed/reversible, non-determinism, latency, or side effects. For a write-capable AI tool with zero annotation coverage this is a meaningful 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 that lead with the core purpose and then the invocation instruction, with no filler. It is efficient, though extremely sparse for a tool with this much behavioral surface.
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 annotations, no output schema, and half the parameters undocumented. For an AI agent that performs writes, the description omits what the call returns, whether the action is synchronous, and how failures or confirmations surface. Too thin for the complexity and risk profile.
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 'message' parameter is documented in the schema and reinforced by 'Describe the goal in plain language'. The 'stationId' parameter has no description in either place. The description adds nothing about what stationId accepts or how the plain-language message is interpreted, so it only partially compensates.
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 names a specific mechanism (the NWS station AI) and enumerates the action classes it can take: create/update pages, tasks, reminders, invites. An agent can tell this is an AI-delegation tool rather than a direct-CRUD tool. It does not explicitly contrast with siblings like nws_create_task, so it falls short of a 5.
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?
'Describe the goal in plain language' tells the agent how to invoke it, which implies it is the natural-language catch-all for station actions. However, it gives no explicit when-to-use guidance versus the many specific siblings (nws_create_task, nws_upsert_rows, calendar_create_event), which is the crucial ambiguity for this tool. Usage is implied, not directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_summarize_databaseC
Summarize an NWS database's contents, optionally through a view.
| Name | Required | Description | Default |
|---|---|---|---|
| viewId | No | ||
| databaseId | Yes |
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 of behavioral disclosure. 'Summarize' implies a read-only operation, but the description does not confirm read-only safety, mention side effects, auth requirements, or any output characteristics.
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?
A single, front-loaded sentence with no wasted words. The purpose and optional parameter are stated efficiently.
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 tool with no annotations, no output schema, and 0% parameter coverage, the description leaves significant gaps: it does not explain when to choose this over siblings, what the summary contains, or any behavioral constraints. Given the dense sibling list, an agent lacks enough context to invoke confidently.
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 only adds meaning for viewId ('optionally through a view') and implicitly for databaseId ('database's contents'); neither parameter receives explicit format, validity, or required/optional detail beyond what the names already convey.
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?
States a specific verb (Sumarize) and resource (NWS database's contents), and adds an optional scope (through a view). Clear enough to distinguish from nws_read_database, but it does not explicitly name or contrast any sibling tool.
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 nws_read_database or nws_summarize_station. The only contextual hint is 'optionally through a view', which describes a parameter, not a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_summarize_stationC
Summarize everything in an NWS station: pages, tasks, databases.
| Name | Required | Description | Default |
|---|---|---|---|
| stationId | Yes |
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 says 'summarize' but does not disclose whether this is a read-only operation, whether it triggers any side effects (e.g., generating a report), what permissions are needed, or what the output looks like. For a tool with zero structured behavioral hints, this is a significant 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?
A single, front-loaded sentence that lists the summary scope. No wasted 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?
For a tool with no output schema, no annotations, and no parameter documentation, the description is too sparse. It omits return format, required permissions, and how to obtain a valid stationId. It is not complete enough for reliable invocation.
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?
There is one parameter (stationId) with 0% schema description coverage. The description mentions the 'station' concept but does not clarify what stationId is (e.g., an identifier from nws_list_stations) or its format. The schema provides no help, so the description should compensate but does not.
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 uses a specific verb (Summarize) and resource (NWS station), and explicitly enumerates the content covered: pages, tasks, databases. This distinguishes it from siblings like nws_summarize_database (database-only) or nws_station_assist (assist, not summary). However, it does not state why one would summarize a station or what format the summary takes.
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?
There is no when-to-use guidance, no mention of alternatives such as nws_summarize_database for a narrower scope, and no prerequisites. The agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nws_upsert_rowsA
Create or update NWS database rows. Omit row_id to insert; set it to update. Read the database first for property ids.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| databaseId | 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 discloses the dual insert/update behavior and the prerequisite read step, which is genuine value, but says nothing about permissions/auth, whether updates are partial or full replacement, conflict handling, or what is returned. Adequate but materially incomplete for a mutation tool.
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?
Three short sentences, no filler, with the core insert/update rule front-loaded before the prerequisite hint. 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 two-parameter but deeply nested mutation tool with no annotations and no output schema, the description covers the mode switch and property-id source but omits how cells/values should be shaped and what sort_order or linked_task_id do. Enough to orient, not enough to call confidently without inspecting the schema.
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 explains row_id semantics (duplicated from the schema field description) and points to the database for property_id values, but leaves databaseId, cells, value, sort_order, and linked_task_id unexplained. Most of the nested cell structure an agent must construct is undocumented.
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?
States a specific compound verb (create or update) and resource (NWS database rows), which is exactly what an upsert does. The insert-vs-update rule is stated inline, so the agent can distinguish this from nws_read_database and nws_summarize_database without opening the schema.
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?
Gives an explicit conditional for the two modes (omit row_id to insert, set it to update) and a prerequisite workflow hint (read the database first for property ids). It does not name an alternative tool or state when not to use this, but the branching guidance is clear and actionable.
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.
22 tool updates
v0.1.0- First observed
billing_usage - First observed
calendar_ai_assist - First observed
calendar_create_event - First observed
calendar_delete_event - First observed
calendar_list_calendars - First observed
calendar_list_events - First observed
calendar_update_event - First observed
cortex_memory_search - First observed
cortex_memory_store - First observed
cortex_turn - First observed
nws_apply_template_blocks - First observed
nws_create_chart - First observed
nws_create_task - First observed
nws_list_stations - First observed
nws_open_page_for_event - First observed
nws_read_database - First observed
nws_search - First observed
nws_search_blocks - First observed
nws_station_assist - First observed
nws_summarize_database - First observed
nws_summarize_station - First observed
nws_upsert_rows
TDQS
Scored across 22 tools
Most tools are distinct by prefix and purpose, but nws_station_assist and nws_create_task/calendar_ai_assist vs calendar_create_event overlap—the AI-assist tools can perform the same actions as the explicit CRUD tools, creating ambiguity about which to use for a given operation.
Names consistently follow prefix_verb_noun (nws_, cortex_, calendar_, billing_) with snake_case throughout, which is predictable and readable. Minor deviation: billing_usage lacks a verb, but overall the convention is well-maintained.
22 tools for a multi-domain server (NWS, Cortex, Calendar, billing) is slightly heavy but reasonable given it spans three distinct product areas. Nothing feels gratuitous, though the set could be trimmed by removing redundant AI-assist/CRUD overlaps.
Coverage is broad and mostly complete: NWS has create/search/summarize/read/upsert plus AI assist; Calendar has full CRUD plus list and AI assist; Cortex has store/search/turn; billing has usage. Minor gaps like calendar delete exists but no explicit NWS delete tool, and Cortex lacks a delete/forget operation.
Maintenance
Related MCP Connectors
Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP.
Governed memory and workspace for any AI: tasks, calendar, mail and pages, with per-action consent.
Hosted runtime for persistent agent teams, durable workflows, memory, schedules, and goals.
Secure durable memory and bounded context for AI agents, with hosted OAuth and local Lite support.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables task management with persistent SQLite storage, along with tools, resources, subscriptions, prompts, and completions over stdio or Streamable HTTP with per-user authentication.1 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables development agents to keep persistent memory: proposing and reviewing workspace-scoped content, running hybrid search over accepted sources, and resuming projects with auditable history and provenance. It exposes 32 MCP tools over stdio and authenticated Streamable HTTP, with optional embeddings and rerank.Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to manage workspaces, projects, tasks, and AI agents, and to generate tools from any OpenAPI spec, through a hosted OAuth-secured endpoint or a local stdio package.2,914 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI clients such as Claude, Cursor, VS Code, and Windsurf to manage workspaces, projects, tasks, and AI agents through hosted OAuth or local stdio tools.2,914 npmMIT