Rillsoft Project 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., "@Rillsoft Project MCP serverSummarize the current project status."
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.
Rillsoft Project MCP server
Rillsoft AI is the AI gateway to Rillsoft Project, the specialist solution for multi-project resource and capacity planning in mid-sized industrial companies: an MCP server built into Rillsoft Project 10, on top of its scheduling engine – not on top of a task list.
The server runs inside the visible, running Rillsoft Project on Windows and exposes the open project to an AI assistant or a script over the Model Context Protocol: project structure and schedule, roles, people, teams, machines and material, candidate search and staffing assistants, capacity analysis, baselines and plan/actual comparison, progress and status date, the resource pool, undo and redo.
This repository contains documentation, client configuration and the npm
launcher (launcher.js, see Install via npx).
The server itself is part of the Rillsoft Project 10 desktop application; the
launcher only forwards to it, and there is no hosted endpoint.
Full documentation: https://rillsoft.ai/en/mcp/
At a glance
Endpoint |
|
Protocol | MCP over Streamable HTTP, revision |
Reach |
|
Requirement | Rillsoft Project 10 on Windows |
Access protection | optional API key, read-only mode, browser origins rejected |
Trade-off | an MCP call carries no user identity and reaches exactly one Rillsoft Project instance |
Related MCP server: arcgis-pro-mcp-free
What it is not
Not a task, to-do or Kanban tool, and not a platform for chat, wiki or team collaboration.
Not a standalone AI product or chat plug-in, but AI access to Rillsoft Project as a whole – product, editions and pricing are on www.rillsoft.com.
Not an AI that schedules on its own: Rillsoft Project calculates dates, workload and the critical path; the AI reads the result.
Not a cloud service: the server is reachable on
127.0.0.1only, inside the open Rillsoft Project. Rillsoft sends nothing; what your AI client sends is governed by its provider's privacy policy.Not a team server: there is no remote access.
Not a portfolio editor: portfolios can be opened and evaluated, but not changed.
Set up
Enable the server. In Rillsoft Project open Settings → MCP server, set the active switch and leave read-only mode switched on for now. Alternatively start
RillPrj.exe /mcp(port3928) orRillPrj.exe /mcp:8123(another port) for one session. Check: the status line shows "running on port 3928".Connect your AI client with
clients/generic.json:{ "mcpServers": { "rillsoft-project": { "type": "http", "url": "http://127.0.0.1:3928/mcp" } } }With an API key set in the settings, use
clients/generic-api-key.json(Authorization: Bearer <KEY>). Ready-made entries per client:Client
File
Where it goes
Verified
Claude Code
.mcp.jsonin the project folder, orclaude mcp add --transport http rillsoft-project http://127.0.0.1:3928/mcp12 Oct 2026, 2.1.296
Claude Desktop
claude_desktop_config.json(Settings → Developer → Edit Config); bridgemcp-remoteneeds Node.js12 Oct 2026, 2.31226
Codex
~/.codex/config.toml, orcodex mcp add rillsoft-project --url http://127.0.0.1:3928/mcp12 Oct 2026, CLI 0.162
VS Code
.vscode/mcp.json12 Oct 2026, 1.117
Cursor
~/.cursor/mcp.jsonper vendor documentation
Claude Code and VS Code need Rillsoft Project 10 build 10.0.625 or later. Any other client that speaks MCP over Streamable HTTP uses the address above; its documentation names the field names. Check: the client lists the server's tools – in read-only mode only the read-only ones.
/mcpis exact,/mcp/is a 404.Ask the first question, for example: Summarize the current project status: dates, progress, open conflicts, in five paragraphs. Shipped industry examples with synthetic data let you try it without your own projects.
Every mutating call is one ordinary undo step in Rillsoft Project – you take it back with Ctrl+Z like any of your own edits.
Step by step with success checks: Get started.
Install via npx (launcher)
For catalogues, registries and clients that only start stdio servers there is
an npm package, @rillsoft/rillsoft-project-mcp (prepared in this repository,
not yet published). It is a launcher, not the server:
With Rillsoft Project 10 running it forwards every request over stdio to the endpoint
http://127.0.0.1:3928/mcp. The address is fixed; there is no environment variable for the address and no API key. If an API key is set in Rillsoft Project, the launcher reports the401– use the HTTP configuration above instead. For diagnostics only,RILLSOFT_MCP_LOG=<file>writes the requests and answers of a session to a log file.Without Rillsoft Project (not running, or not Windows) it answers
initializeandtools/listitself fromtools-list.json– the same 118 tools as the program – and everytools/callwithisError: trueand a hint. This is what lets catalogues show the tools on Linux.
{
"mcpServers": {
"rillsoft-project": {
"command": "npx",
"args": ["-y", "@rillsoft/rillsoft-project-mcp"]
}
}
}Requires Node.js 18 or later; real results only on Windows with Rillsoft Project 10 running. Customers do not need the launcher: the configurations above connect directly to the running program.
If something is stuck
Symptom | Cause and remedy |
| session or protocol revision missing – send |
| an API key is set; the client needs |
| the request carries an |
no port after a crash | the auto-recovery dialog is waiting; answer it or start |
server does not listen immediately | it starts a few seconds after the program |
Tool catalogue and contract
Tool names carry the prefix rillsoft_ and are English in every language
build; arguments, result fields, enum values and error codes are stable,
messages follow the language of the running Rillsoft Project. How
tools/list, schemas, errors, undo, read-only mode and sessions work:
Developers: the MCP server contract.
The complete tool catalogue – 118 tools of Rillsoft Project 10.0.626.0 with
title, access class, parameters and description – is in
TOOLS.md. It is generated from tools/list of the running program
by scripts/generate_tools.py, never edited by hand; the raw result, including
the output schemas, is in tools-list.json.
Links
MCP server: https://rillsoft.ai/en/mcp/
Get started: https://rillsoft.ai/en/get-started/
Developers: https://rillsoft.ai/en/developers/
Prompt library: https://rillsoft.ai/en/prompts/
Product: https://www.rillsoft.com/mcp-server/
Official MCP Registry:
ai.rillsoft/rillsoft-project(entry)
Provider
Rillsoft GmbH, Leonberg, Germany – software for scheduling, resource and multi-project planning. Rillsoft Project is proprietary software; this repository contains its MCP documentation and the launcher.
License
The documentation and the tool catalogue in this repository are licensed
under CC BY 4.0; the launcher code (launcher.js) under the
MIT License. Rillsoft Project itself, including its MCP
server, is proprietary software of Rillsoft GmbH and is not covered by either
license.
Available Tools
118 toolsrillsoft_analysis_option_listList analysis optionsARead-onlyIdempotent
Reports the supported views with the groupings (named ones and every 2D/3D/4D combination of the grouping menu), presentations and secondary views each of them permits, the value sets for secondaryChart and costCurve, and the view state currently set (view, grouping, presentation, time filter, secondary view). Ask this before rillsoft_view_state_apply to learn which combinations exist; pass view to get only the one view you need. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | restrict views[] to this one view; omit for all views. Pass it whenever you already know which view you are going to set - the full list is large (about 1 400 level sequences) |
Output Schema
| Name | Required | Description |
|---|---|---|
| views | Yes | all analysis views, or only the one named in the argument view |
| costCurves | Yes | permitted cost curves |
| currentState | Yes | the analysis state currently set |
| secondaryCharts | Yes | resource types that can be shown in the resource chart |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds genuinely new context by spelling out the content of the result (groupings, presentations, secondary views, value sets, current view state) and noting it can be scoped; the 'read-only, no undo step' clause largely restates the annotations rather than adding to them.
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 dense sentences that are front-loaded with the return content and then the usage instruction. Efficient and free of filler, though the first sentence is long and packs a lot of enumeration.
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 an output schema present, the description needn't document return values, yet it still frames what the listing contains and when to use it. Combined with 100% schema coverage and full annotations, an agent has everything needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description already documents the single 'view' parameter, its enum values, and the rationale for scoping. The description only reinforces the same point ('pass view to get only the one view you need'), which is useful routing but adds no semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Reports/Lists) and resource (supported analysis options: views, groupings, presentations, secondary views) and enumerates exactly what is returned. It distinguishes itself from siblings by naming rillsoft_view_state_apply as the natural consumer of this information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call this before rillsoft_view_state_apply to learn which combinations exist, and gives a concrete alternative path ('pass view to get only the one view you need'). Both the when-to-use and the when/what-else are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_analysis_report_getRead analysis reportARead-onlyIdempotent
Reads the resource or capacity view currently visible as a flat YAML report: reference lists plus items carrying demand (and in capacity views supply) in the time grid of the visible calendar scale. The scope is that one visible view, not the whole project - which view it is comes from rillsoft_view_state_get, and rillsoft_view_state_apply switches it. It takes no parameters. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| yaml | Yes | the report as YAML, the same text as in content[0].text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: the flat YAML output shape, the view-scoped (not project-wide) behavior, and 'no undo step.' Return details are not repeated, which is fine since an output schema exists.
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?
Front-loaded with the verb+resource+format, followed by scope and dependency information that earns its place. Slight redundancy: 'Read-only' restates readOnlyHint and 'It takes no parameters' restates the empty schema, but the overall structure is tight and non-padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with an output schema, the description supplies everything an agent needs: scope, output format, the view-state prerequisite tools, and the fact that no undo exists. Nothing material 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 there is nothing for the schema to document and the baseline is 4. The description sensibly confirms 'It takes no parameters,' which is the only parameter-relevant statement available.
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+resource+format: it 'Reads the resource or capacity view currently visible as a flat YAML report.' It also defines the scope precisely ('that one visible view, not the whole project'). It does not contrast against the sibling report tool rillsoft_variance_report_get, keeping it just 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?
It gives clear operational context: which view is read comes from rillsoft_view_state_get and rillsoft_view_state_apply switches it, so the agent knows the prerequisite chain. However it does not state when to prefer this tool over alternatives such as rillsoft_variance_report_get, so no explicit exclusions are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_baseline_createCreate baselineADestructive
Creates a baseline as a snapshot of the current state of the project and selects it. With replaceAll:true the existing baselines are deleted first - that is the destructive part of this tool. Switching between existing baselines goes through rillsoft_baseline_select, and the planned-versus-actual comparison itself through rillsoft_variance_report_get. Refused in a portfolio: there is no baseline there, not even per project. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | name of the baseline; defaults to the project name plus a timestamp | |
| replaceAll | No | true = delete the existing baselines first (defaults to false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | name of the created baseline |
| uuid | Yes | UUID of the created baseline |
| number | Yes | number of the created baseline |
| selection | Yes | the selected baseline |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, but the description adds real value beyond them: it localizes the destruction to the replaceAll:true path, notes the portfolio refusal, and mentions 'One undo step' (reversibility). It does not give a return payload or what the new baseline looks like, but the output schema covers that, so this is close to complete.
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?
Four tight sentences, each earning its place: core action, the destructive flag path, sibling routing, and portfolio refusal plus undo. Front-loaded with the verb and the destructive caveat early.
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 mutation with an output schema, it covers the action, the destructive branch, reversibility ('one undo step'), a domain restriction (no portfolio baselines), and how to reach related tools. Nothing an agent needs 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?
Schema coverage is 100%, so the schema already documents both parameters. The description still adds meaning beyond the schema by attaching the destructive consequence to the replaceAll:true flag and clarifying that the created baseline is selected. This makes the flag's side effect explicit rather than just a boolean 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 ('creates a baseline') and resource with concrete semantics: a snapshot of the current project state that also gets selected. It explicitly distinguishes itself from rillsoft_baseline_select and rillsoft_variance_report_get, so the agent can route between baseline siblings without opening schemas.
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?
Explicit when-to-use alternatives: switching baselines goes through rillsoft_baseline_select, comparison through rillsoft_variance_report_get. It also names a when-not condition ('Refused in a portfolio'), which no sibling sibling makes redundant. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_baseline_deleteDelete baselineADestructive
Deletes a baseline; where it was the selected one, the selection falls back to the dynamic baseline. Only that snapshot goes - the project keeps its planning data untouched. Listing what exists goes through rillsoft_baseline_list. Refused in a portfolio: there is no baseline there, not even per project. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | baseline number from rillsoft_baseline_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| plans | Yes | all baselines of the project |
| selection | Yes | the selected baseline |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation: it discloses that selection falls back to the dynamic baseline, that only the snapshot is removed while project planning data stays intact, that portfolios are refused, and that the action is 'one undo step'. These are exactly the side effects and reversibility facts an agent needs.
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?
Four short sentences, front-loaded with the action and consequence, each carrying distinct information (fallback, data preservation, sibling routing, portfolio restriction, undo). 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 annotations covering the safety profile and an output schema present, the description supplies the remaining behavioral context - reversibility, data impact, and environmental restriction - leaving nothing material for an agent to guess.
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% - the number parameter is fully documented as coming from rillsoft_baseline_list, which the description echoes. The description adds no syntax or format detail 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?
States a specific verb (Deletes) and resource (a baseline), then distinguishes it from the sibling rillsoft_baseline_list for enumeration. An agent can immediately tell this is the removal operation versus create/select/list in the baseline family.
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?
Names the alternative (listing goes through rillsoft_baseline_list) and gives a clear when-not condition (refused in a portfolio, no baseline exists there). It lacks explicit guidance on when to delete versus re-select, but the routing to the relevant sibling is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_baseline_listList baselinesARead-onlyIdempotent
Reads the baselines of the project (number, name, uuid) and the active selection (number, dynamic, name). Number 0 while baselines exist means the dynamic baseline. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plans | Yes | all baselines of the project |
| selection | Yes | the selected baseline |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so 'Read-only, no undo step' is partly redundant, but the 'no undo step' phrasing adds that the call does not create a history entry. The domain rule 'Number 0 while baselines exist means the dynamic baseline' is genuine behavioral context not present in any structured field.
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 resource and return shape, with no filler. The dynamic-baseline rule is dense but earns its place because it is non-obvious.
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 parameters, an output schema covering return values, and annotations covering the safety profile, the description is essentially complete; the only omission is any hint of when to prefer this over the other baseline_* tools.
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 of 4 applies; the description correctly spends no space on argument semantics and instead describes what is returned.
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 ('Reads') and resource ('the baselines of the project') and even enumerates the returned fields (number, name, uuid) plus the active selection. An agent can distinguish it from baseline_create/delete/select by the read verb, though the description never explicitly names those siblings.
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 only implied: it reads baseline state, so an agent infers 'use this to inspect baselines before selecting or deleting one.' No explicit when-to-use, prerequisites, or named alternatives (baseline_select, baseline_delete) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_baseline_selectSelect baselineAIdempotent
Selects the baseline used for the planned-versus-actual comparison. It only moves the selection; no baseline is created or deleted here (rillsoft_baseline_create and rillsoft_baseline_delete do that), and the comparison itself is read through rillsoft_variance_report_get. Refused in a portfolio: there is no baseline there, not even per project. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | baseline number from rillsoft_baseline_list; 0 = the dynamic baseline, combined per task out of all baselines |
Output Schema
| Name | Required | Description |
|---|---|---|
| selection | Yes | the selected baseline |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent=true and destructive=false, and the description usefully adds that the operation is a single undo step and that it is refused in a portfolio (a real error condition). It stops short of describing what happens to the previously selected baseline, but the added context is substantive.
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 tight sentences, front-loaded with the core action, then the boundary with siblings, then the refusal condition and undo behavior. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers the mutation, its scope, sibling boundaries, the undo cost, and the failure case, which is everything an agent needs to invoke 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 coverage is 100% and the schema itself explains the 'number' parameter including the 0 = dynamic baseline semantics. The description adds no parameter-level detail beyond that, so the 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?
States a specific verb and resource ('Selects the baseline') and scopes it to the planned-versus-actual comparison. It explicitly distinguishes itself from the sibling tools that create/delete baselines and the one that reads the comparison.
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?
Names the alternatives (rillsoft_baseline_create, rillsoft_baseline_delete, rillsoft_variance_report_get) with the condition that selects each, and states an explicit exclusion: it is refused in a portfolio. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_calendar_createCreate calendarA
Creates a calendar; without 'week' it takes the default weekly model, Monday to Friday 08:00-12:00;13:00-17:00. Inside an open unit of work only.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | code of the calendar; it has to be unique across the pool, but it may stay empty | |
| name | No | name of the calendar | |
| week | No | weekly model: { sun, mon, tue, wed, thu, fri, sat } carrying shifts such as "08:00-12:00;13:00-17:00"; empty means a day off | |
| color | No | color as #RRGGBB | |
| notes | No | notes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | id of the calendar |
| code | No | code of the calendar; missing when none is set |
| name | No | name of the calendar |
| outcome | Yes | what the call did |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false). The description adds two genuinely non-obvious behaviors on top: the implicit default weekly model (Mon–Fri 08:00-12:00;13:00-17:00) and the transactional precondition requiring an open unit of work.
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 clauses, no filler, and the most surprising fact (the implicit default weekly model) is front-loaded. The trailing precondition is terse to the point of being slightly cryptic, but nothing is wasted.
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-param mutation tool with a full schema, an output schema, and annotations, the description covers the two things structured data can't: implicit defaulting and the required transactional context. It omits error behavior and how the created calendar is identified, which are minor given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by defining the meaning of an omitted 'week' parameter — a default value the schema does not state. That is real added semantic value for the one parameter whose absence matters most.
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 ('Creates a calendar') and immediately clarifies the default modeling behavior when 'week' is omitted. It does not name sibling tools (rillsoft_calendar_update, rillsoft_calendar_source_import), so an agent must infer the distinction from the name alone.
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 'Inside an open unit of work only' is a real precondition that tells the agent when the call is legal, which is more than most definitions offer. However, there is no guidance on choosing this tool over calendar_source_import or calendar_update, and no statement about what to do if no unit of work is open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_calendar_deleteDelete calendarADestructive
Deletes a calendar. Where at least one idref_calendar points at it, the call is refused and names what refers to it - that reference lives inside the pool and would point nowhere. The last calendar of a pool stays. Inside an open unit of work only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | id of the calendar; give exactly one of 'id', 'code' and 'name' | |
| code | No | code of the calendar | |
| name | No | name of the calendar |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | id of the calendar |
| code | No | code of the calendar; missing when none is set |
| name | No | name of the calendar |
| outcome | Yes | what the call did |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint annotation by disclosing the referential-integrity rule (refused and named when referenced, because the pool reference would dangle), the invariant that the last calendar of a pool survives, and the requirement to be inside an open unit of work. These are exactly the multi-step and rollback-relevant facts an agent needs before invoking a destructive operation.
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?
Four short sentences, front-loaded with the core action and then the failure and invariant clauses in priority order. The clause 'that reference lives inside the pool and would point nowhere' is slightly convoluted but earns its place by justifying the refusal.
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?
An output schema exists, so return values need no explanation, and the description still covers refusal behavior, invariants and transaction scope. It omits permission/authorization requirements, but otherwise the destructive path is adequately framed.
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% and the schema itself states 'give exactly one of id, code and name', so the parameter contract is fully carried by structured data. The description adds nothing about the identifier options, which matches the baseline of 3 when the schema does the heavy lifting.
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 ('Deletes a calendar'), which is unambiguous and clearly distinct from the create/update/list siblings. It does not explicitly name an alternative, but the delete semantic is not confusable with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real preconditions — the call is refused when an idref_calendar references the calendar, and it must run 'inside an open unit of work' — which shapes when the call can succeed. However, it never contrasts with calendar_update or any sibling, and it does not explain how to resolve a refusal, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_calendar_listList calendarsARead-onlyIdempotent
Reads calendars of the master data: the weekly scheme (shifts per weekday sun..sat, empty meaning a day off) and the exception days (public and special days) within the period. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | calendar id from rillsoft_resource_pool_catalog_list; empty means every calendar | |
| to | No | finish of the period, DD.MM.YYYY hh:mm; defaults to the project finish | |
| from | No | begin of the period for exception days, DD.MM.YYYY hh:mm; defaults to the project start |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | finish of the evaluated period, DD.MM.YYYY hh:mm |
| from | Yes | begin of the evaluated period, DD.MM.YYYY hh:mm |
| calendars | Yes | the calendars of the resource pool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and the description reinforces this with "Read-only, no undo step." Beyond the safety profile it adds genuine domain behavior: what an empty weekday slot means (a day off) and that exception days cover public and special days. It does not describe pagination or result shape, but that is partly covered by 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the verb and the returned data model, with the read-only caveat appended. Every clause carries information (weekly scheme, sun..sat order, empty = day off, exception day types), though the parenthetical stacking makes it slightly heavy.
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 annotations covering the safety profile and an output schema covering the return structure, the description supplies the remaining domain context an agent needs: what a calendar record consists of and what the period filters delimit. Only the routing against sibling calendar tools 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?
Schema description coverage is 100%, so the schema already documents all three parameters, including the id source and the DD.MM.YYYY hh:mm formats. The description only echoes the period-scoping idea ("within the period"), adding no syntax or default behavior beyond what the schema states, 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 and resource ("Reads calendars of the master data") and enumerates what the calendars contain: the weekly scheme with shifts per weekday and the exception days. That is far more specific than the bare title, though it never names how it differs from near siblings such as rillsoft_calendar_source_get or rillsoft_calendar_create/update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the read scope ("within the period") but gives no when-to-use, no when-not, and no alternative tool. An agent gets no routing help against the calendar_source_get or resource_pool_catalog_list siblings, and must infer from the schema that id must be sourced elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_calendar_source_getRead holiday sourceARead-onlyIdempotent
Reads the holiday source without changing anything: which source calendars exist, and which years do they carry days for? The pool is never changed.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | https URL or absolute path of a holiday source (.xml); it defaults to the source of the program language |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | evaluated source, URL or file path |
| calendars | Yes | calendars of the source |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and the description largely restates that safety profile ("without changing anything", "never changed"). The scoping detail that the resource pool is untouched, and that coverage is reported per source calendar/year, adds some value beyond the annotations but not rich behavioral context.
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 with the read-only nature front-loaded, and the second sentence reinforces the guarantee before the payoff. Slightly redundant, since "without changing anything" and "never changed" make the same point twice.
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 read-only getter with a full output schema, complete parameter documentation and covering annotations, the description is sufficient; an agent knows what it returns and that nothing is mutated. Only the routing versus sibling calendar tools is left unstated.
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% for the single optional source parameter, including its HTTPS/path format and the default-to-program-language behavior. The description adds nothing about the parameter, so the schema-driven baseline of 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?
States a specific verb and resource ("Reads the holiday source") and clarifies the returned content: which source calendars exist and which years they cover. It implicitly contrasts with the write-oriented sibling rillsoft_calendar_source_import, but never names that alternative explicitly.
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 only implied: the read-before-import workflow is inferable from the name and the sibling import tool, but the description never states when to call this versus rillsoft_calendar_source_import or rillsoft_calendar_list. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_calendar_source_importAdopt holidaysADestructiveIdempotent
Adopts the holidays of a source calendar into a pool calendar. What gets replaced is a whole year at a time: a year the source carries days for is overwritten completely, company holidays entered by hand in that year included, while a year without source data stays untouched. The only guard against that is 'years'. The answer names the days removed and the days created per year. Inside an open unit of work only.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | the years to adopt, either an array such as [2026, 2027] or an object { from, to }; it defaults to every year the source carries | |
| source | No | https URL or absolute path of a holiday source (.xml); it defaults to the source of the program language | |
| sourceCalendar | Yes | name (preferred) or id of a calendar of the source; rillsoft_calendar_source_get reports them | |
| targetCalendar | Yes | { id } or { code } or { name } of the pool calendar to fill |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | id of the calendar |
| code | No | code of the calendar; missing when none is set |
| name | No | name of the calendar |
| years | Yes | balance per year |
| source | Yes | evaluated source, URL or file path |
| created | Yes | days created in total |
| outcome | Yes | what the call did |
| sourceCalendar | Yes | name of the adopted source calendar |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true, but the description goes well beyond that by disclosing the exact blast radius: whole-year replacement, hand-entered company holidays in that year are lost, years without source data are untouched. It also states what the response contains (days removed and created per year) and the transactional precondition.
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?
Front-loads purpose, then behavior, then the guard parameter, then the return, then the precondition. Every sentence carries information an agent needs; no filler or restatement of the title.
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 destructive, nested-schema, open-world operation this is complete: annotations cover safety, the output schema covers return shape, and the description covers destruction scope, guard behavior, and the transaction requirement. Nothing an agent needs to invoke 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?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics for 'years' by framing it as the sole protection against the whole-year overwrite. It does not add syntax details (array vs {from,to}) beyond what the schema already documents.
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 pair ('adopts the holidays of a source calendar into a pool calendar'), which is unambiguous against siblings like rillsoft_calendar_source_get (read) or rillsoft_calendar_create (create). An agent can identify this as the bulk-import operation 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 a hard precondition ('Inside an open unit of work only') and identifies 'years' as the only guard against the overwrite, which tells the agent how to use the tool safely. It does not, however, name alternative tools or explicitly say 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.
rillsoft_calendar_updateUpdate calendarADestructiveIdempotent
Changes a calendar as a partial update, so only the fields given take effect, and replaces its exception days inside a range you name explicitly. Days outside that range stay as they are. Inside an open unit of work only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | id of the calendar; give exactly one of 'id', 'code' and 'name' | |
| code | No | code of the calendar | |
| name | No | name of the calendar, the fallback for pools without codes; renaming goes through 'newName' | |
| week | No | weekly model; only the weekdays given are changed | |
| color | No | color as #RRGGBB | |
| notes | No | notes | |
| range | No | { year } or { from, to } (DD.MM.YYYY); exception days are replaced inside that range only | |
| newCode | No | new code of the calendar; it has to stay unique across the pool | |
| newName | No | new name of the calendar | |
| exceptionDays | No | exception days inside the range, each of them { date, shift (optional, empty meaning a day off), asWeekday (optional) }. An empty array clears exactly that range. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | id of the calendar |
| code | No | code of the calendar; missing when none is set |
| name | No | name of the calendar |
| range | No | the replaced range; only when exception days were changed |
| created | No | exception days created; only with a replaced range |
| outcome | Yes | what the call did |
| removed | No | exception days removed; only with a replaced range |
| unchanged | No | exception days left unchanged; only with a replaced range |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds valuable scope detail: exception days are replaced only inside the named range while days outside stay as they are. This precisely bounds the destructive behavior in a way annotations cannot.
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, front-loaded sentences with the partial-update contract stated first and the precondition last. No wasted text, though the final fragmentary 'Inside an open unit of work only' is slightly clipped.
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 an output schema, full schema coverage, and safety annotations present, the description only needs to add behavioral nuance, which it does via the range-replacement rule. It is essentially complete for an agent 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 coverage is 100%, so the schema already documents all 10 parameters, setting the baseline at 3. The description reinforces the range-scoped behavior of exceptionDays and the partial-update contract, but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('changes a calendar as a partial update') and resource, and clarifies the mutation is partial rather than full. It reads clearly against siblings like rillsoft_calendar_create and rillsoft_calendar_delete, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a real precondition ('inside an open unit of work only') and clarifies partial-update semantics so the agent knows omitted fields are untouched. It does not explicitly route between update/create/delete alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_document_ris_createAttach RIS documentA
Stores a local file as a new document in the document management of the Rillsoft Integration Server and hangs it on a task, a subproject or the project itself - the 'Add' button of the documents page. Today the server accepts documents on tasks only: a subproject or the project itself answers ris_not_found (the text says why), so give the uuid of a task. Takes effect on the server at once: no undo step, the project itself is not marked as changed, and rillsoft_history_undo does not take it back; rillsoft_document_ris_delete removes it. Requires the project to be stored on the server (rillsoft_project_ris_save_as first for a new one), the DMS license function and the create role; refused in an open portfolio, as in the documents dialog; the answer is the document as the server holds it afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | absolute path of the local file to store; its file name becomes the document name | |
| uuid | No | UUID of the task or subproject the document hangs on; missing = the project itself | |
| folderId | Yes | id of the DMS folder the document goes into, from folders[] of rillsoft_document_ris_list | |
| description | No | description stored with the document |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | file name of the document |
| note | No | hints of the product path; missing when there were none |
| uuid | Yes | UUID of the element the document hangs on - a task, a subproject or the project itself |
| fileSize | Yes | size of the stored file in bytes |
| folderId | Yes | id of the DMS folder the document lies in |
| createdAt | Yes | time the document was stored, DD.MM.YYYY hh:mm; empty when the server reports none |
| projectId | Yes | id of the project the document belongs to |
| documentId | Yes | id of the document on the server; what _get, _update and _delete take |
| folderPath | Yes | names of the DMS folders from the root, joined by ' / '; empty when the folder is unknown to the tree |
| description | Yes | description; empty when none is set |
| elementName | Yes | name of that element |
| createdUserName | Yes | user who stored it; empty when the server reports none |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only the read/write/idempotency profile, but the description adds rich context the annotations cannot: immediate effect with no undo (history_undo does not take it back), the project is not marked as changed, refusal in an open portfolio, auth/license requirements, and that the response is the stored document.
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 purpose and key constraint are front-loaded and nearly every clause carries operational value (undo behavior, prerequisite tools, restrictions). It is, however, a dense run-on paragraph that could be structured with clearer breaks to improve parseability.
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 an output schema and annotations present, the description covers prerequisites, side effects, restrictions, and return value, leaving nothing an agent would need in order 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 four parameters. The description reinforces usage (task uuid needed, folderId from rillsoft_document_ris_list) but adds no syntax or format detail beyond what the schema provides, matching the baseline for full 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+resource: stores a local file as a new DMS document on the Rillsoft Integration Server and attaches it to a task/subproject/project, explicitly likening it to the 'Add' button. This clearly distinguishes it from siblings like rillsoft_document_ris_update and rillsoft_document_ris_delete.
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 explicit when-to-use conditions and constraints: documents are accepted on tasks only today, subproject/project answers ris_not_found, so pass a task uuid. It also points to rillsoft_document_ris_delete for removal and states prerequisites (project stored, DMS license, create role).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_document_ris_deleteDelete RIS documentADestructiveIdempotent
Deletes one document of the open project from the document management of the Rillsoft Integration Server - the 'Delete' button of the documents page. The server deactivates it (soft delete; an administrator can restore it there). Takes effect at once: no undo step, the project itself is not marked as changed. A document that is already gone answers ris_not_found. rillsoft_document_ris_create is the counterpart. Runs with the login of the desktop session; needs the delete role.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | id of the document, from rillsoft_document_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | hints of the product path; missing when there were none |
| deleted | Yes | always true - a failure is an error, not a false |
| remaining | Yes | documents still hanging on the same element |
| documentId | Yes | id of the document that was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by disclosing that the delete is a soft delete (server deactivates it, admin can restore), that it takes effect immediately with no undo, that the project is not marked changed, that a missing document returns ris_not_found, and that it runs as the desktop session login requiring the delete role. This is exactly the operational detail annotations cannot carry.
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?
Front-loads the core action, then layers side constraints, error behavior, counterpart tool, and auth requirement in compact clauses with no wasted sentences. Dense but efficient; slightly jammed into one paragraph.
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?
An output schema exists, so return values need not be described. The description still covers the semantics an agent needs: soft-delete behavior, irreversibility, error case, permission requirement, and session context.
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% and documentId is already documented as coming from rillsoft_document_ris_list. The description only adds the scoping notion 'of the open project', so per the high-coverage baseline a 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?
States a specific verb (deletes) and resource (one document of the open project in the RIS document management), and anchors it to a concrete UI surface ('the Delete button of the documents page'). It also names its counterpart rillsoft_document_ris_create, so an agent can distinguish it from create/update/get/list siblings.
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 clear context for when this applies (deleting a document from the open project via the documents page) and points to rillsoft_document_ris_create as the counterpart operation. It does not explicitly enumerate when NOT to use it (e.g., folder_ris_delete vs document deletion), so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_document_ris_getDownload RIS documentARead-onlyIdempotent
Downloads one document of the open project from the document management of the Rillsoft Integration Server into a local file - the 'Download' button of the documents page, with the target path given instead of asked. An existing file at path is refused unless overwrite:true; on any failure no partial file is left behind. The document itself is not changed; rillsoft_document_ris_list names the ids. Runs with the login of the desktop session. No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | absolute path of the file to write, including the file name; the file is written, not opened | |
| overwrite | No | true = replace a file that already exists at path | |
| documentId | Yes | id of the document, from rillsoft_document_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | file name of the document |
| path | Yes | path of the file that was written |
| uuid | Yes | UUID of the element the document hangs on - a task, a subproject or the project itself |
| fileSize | Yes | size of the stored file in bytes |
| folderId | Yes | id of the DMS folder the document lies in |
| createdAt | Yes | time the document was stored, DD.MM.YYYY hh:mm; empty when the server reports none |
| projectId | Yes | id of the project the document belongs to |
| documentId | Yes | id of the document on the server; what _get, _update and _delete take |
| folderPath | Yes | names of the DMS folders from the root, joined by ' / '; empty when the folder is unknown to the tree |
| description | Yes | description; empty when none is set |
| elementName | Yes | name of that element |
| bytesWritten | Yes | bytes written to that file |
| createdUserName | Yes | user who stored it; empty when the server reports none |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. Description adds valuable beyond-annotation behavior: an existing file is refused unless overwrite:true, no partial file is left on failure, runs with desktop session login. Does not mention output schema contents, but those are declared.
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?
Dense but front-loaded: purpose first, then overwrite rule, failure safety, and session context. Each sentence carries distinct information. Slightly long sentence but 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?
Covers purpose, id source, overwrite semantics, failure safety, session authentication, and 'no undo' irreversibility. With a rich schema (100% coverage) and output schema, the description provides everything 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 parameters (path, overwrite, documentId) are fully documented in the schema. The description adds semantic context for path ('target path given instead of asked') and overwrite refusal behavior, but mostly reiterates schema content. 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?
States a specific verb+resource ('Downloads one document of the open project from the document management') and maps it to a concrete UI analogue ('the Download button of the documents page'). Clearly distinguishes from siblings by contrasting the target path being given instead of asked, and points to rillsoft_document_ris_list for ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: which document source, where ids come from (rillsoft_document_ris_list), and the overwrite behavior condition. Does not explicitly name when to prefer rillsoft_document_ris_update/create, but the download purpose is unambiguous against those siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_document_ris_listList RIS documentsARead-onlyIdempotent
Lists the documents the document management (DMS) of the Rillsoft Integration Server holds for the open project - files hanging on a task, a subproject or the project itself - together with the DMS folder tree of the client. In an open RIS portfolio it lists the documents of every loaded project (each names its projectId; the answer carries portfolioId), and downloading, updating and deleting work there too - only creating is refused, as in the documents dialog. Each document names the element it hangs on (uuid), its folder (folderId, folderPath) and the documentId the other document tools take. Requires a project opened from the server (rillsoft_project_ris_open) or stored there (rillsoft_project_ris_save_as); a new or file-based project has no documents. Reads the server every time; runs with the login of the desktop session. Read-only, no undo step. Not to be confused with the project files rillsoft_project_file_open handles.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | No | UUID of a task, subproject or the project itself: only the documents hanging on that element; missing = every document of the project |
Output Schema
| Name | Required | Description |
|---|---|---|
| server | Yes | URL of the Rillsoft Integration Server the desktop session is logged in to |
| folders | Yes | the DMS folder tree of the client, root first |
| clientId | Yes | id of the logged-in client; -1 while none is selected |
| userName | Yes | user name of the desktop session |
| documents | Yes | the documents of the open project, or of the one element given by uuid; at most 10000, more than that is an error |
| projectId | Yes | id of the open project on the server; -1 while a portfolio is open, each document then names its own |
| portfolioId | No | id of the open portfolio on the server; only while a RIS portfolio is open |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world. The description adds real value beyond them: it reads the server every call, runs with the desktop session login, and has no undo step. It also explains the portfolio-vs-project output difference (portfolioId returned, projectId per project). It does not discuss auth failure modes or result size/pagination, keeping 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?
Information-dense but long-winded, with heavy em-dash clauses and interleaved portfolio, download, prerequisite and output details. The core 'what it lists' is front-loaded, but the middle sentences ramble and could be tightened without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description needn't enumerate return fields, yet it usefully names the identifying fields (uuid, folderId, folderPath, documentId). With a single optional param, annotations, and output schema, the description covers the prerequisites and portfolio edge cases an agent needs; only failure/auth specifics are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents the uuid parameter fully. The description reinforces the semantics by explaining that omitting uuid returns every document, and that each returned document carries uuid/folderId/folderPath/documentId – meaningfully linking the parameter to the output.
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 ('Lists the documents the DMS... holds') and scopes it to the open project, including which elements documents hang on. Explicitly distinguishes itself from the sibling rillsoft_project_file_open and from the document create tool, so an agent can route correctly.
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 explicit prerequisites (project must be opened via rillsoft_project_ris_open or saved via rillsoft_project_ris_save_as; new/file-based projects have none) and states what is and isn't supported in a portfolio (read/update/delete work, create is refused). Names the sibling not to be confused with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_document_ris_updateUpdate RIS documentADestructive
Changes the description, the DMS folder and/or the content of one document in the document management of the Rillsoft Integration Server - editing the description in the list, dragging it into a folder and the 'Upload' button of the documents page. At least one of description, folderId and path is required; the element the document hangs on cannot be changed (delete and attach again). Replacing the content with path is destructive: the stored file is overwritten and its name follows the new file. Takes effect on the server at once - no undo step, the project itself is not marked as changed. Without a path and without a difference nothing is sent. Runs with the login of the desktop session; needs the modify role.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | absolute path of a local file whose content replaces the stored file; the document takes that file's name | |
| folderId | No | id of the DMS folder to move the document into | |
| documentId | Yes | id of the document, from rillsoft_document_ris_list | |
| description | No | new description |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | file name of the document |
| note | No | hints of the product path; missing when there were none |
| uuid | Yes | UUID of the element the document hangs on - a task, a subproject or the project itself |
| fileSize | Yes | size of the stored file in bytes |
| folderId | Yes | id of the DMS folder the document lies in |
| createdAt | Yes | time the document was stored, DD.MM.YYYY hh:mm; empty when the server reports none |
| projectId | Yes | id of the project the document belongs to |
| documentId | Yes | id of the document on the server; what _get, _update and _delete take |
| folderPath | Yes | names of the DMS folders from the root, joined by ' / '; empty when the folder is unknown to the tree |
| description | Yes | description; empty when none is set |
| elementName | Yes | name of that element |
| createdUserName | Yes | user who stored it; empty when the server reports none |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true, idempotentHint=false): it explains that path replacement overwrites the stored file and renames the document to the new file's name, that changes apply server-side immediately with no undo, that the project is not marked as changed, that it runs under the desktop session login, and that the modify role is required. This is exactly the extra behavioral context the annotations cannot convey.
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?
Front-loaded with the core action and the required-parameter constraint, and every clause carries real information (destructiveness, no undo, role requirement). It is dense and somewhat run-on, and the UI-action mapping (dragging, 'Upload' button) is slightly verbose, but nothing 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?
An output schema exists, so return values need not be described. Combined with the schema, the description covers auth requirements, side effects (overwrite/no undo/rename), the no-op condition, and the immovable-parent constraint, leaving no material gap for correct 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?
Schema description coverage is 100%, so the per-field meanings are already documented (baseline 3). The description adds cross-parameter semantics the schema cannot express: the at-least-one-of constraint across description/folderId/path, and the consequence that replacing content via path also renames the document.
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 ('Changes') and the exact resources touched (description, DMS folder, and/or document content) within the Rillsoft Integration Server document management. It maps the operation to concrete UI actions (edit in list, drag into folder, Upload button), which distinguishes it from rillsoft_document_ris_create/delete/get without opening a 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?
Explicitly states the precondition that at least one of description, folderId, or path is required, and rules out changing the parent element ('cannot be changed - delete and attach again'), plus the no-op case ('without a path and without a difference nothing is sent'). It does not name sibling tools as alternatives by name, but the when/when-not conditions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_element_deleteDelete elementADestructive
Deletes a task or a subproject, together with its dependencies respectively its content. Here element means a task or a subproject - this is the generic way that takes either. Where you know which of the two you have, rillsoft_task_delete and rillsoft_subproject_delete say so in the name and refuse the other kind. The main project cannot be deleted. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the task or subproject |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | UUID of the element that was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this destructive and non-idempotent, and the description goes beyond that by disclosing cascade scope (dependencies / subproject content are removed with the element), the protected resource (main project cannot be deleted), and reversibility ('One undo step'). These are exactly the behavioral facts an agent needs before committing a destructive 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?
The destructive scope and the protected-root constraint are front-loaded, and every sentence carries information. The third sentence ('Here element means a task or a subproject - this is the generic way that takes either') slightly restates what the opening sentence already implied, which is the only real redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. With cascade behavior, the undeletable project, the undo guarantee, and routing to the two kind-specific siblings all covered, an agent has everything needed to call this correctly and safely.
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 a single required parameter with 100% schema description coverage, so the schema already defines uuid as the task/subproject identifier and the description adds nothing further (no format, no way to obtain the UUID). Baseline 3 applies when the schema carries the parameter semantics.
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 (deletes) and resource (task or subproject), and explicitly defines the ambiguous term 'element' so the agent knows the tool is the polymorphic variant. It also names the two sibling tools that handle single kinds, so an agent can distinguish this tool from rillsoft_task_delete and rillsoft_subproject_delete without opening a 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?
It gives an explicit selection rule: use this generic tool when the element kind is unknown, and use rillsoft_task_delete / rillsoft_subproject_delete when the kind is known ('they refuse the other kind'). It also states an exclusion — 'The main project cannot be deleted' — which prevents a whole class of failed calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_element_moveMove elementA
Moves elements - here an element is a task or a subproject. Give exactly one of position with newParentUuid, direction, or extractFromSubproject. RP reassigns the WBS codes; dependencies and assignments survive. Display rows stay valid: where only part of a row moves away, the row is split cleanly. In a portfolio no element changes its project and none goes directly below the portfolio, as in the user interface; with direction the projects themselves can be reordered at portfolio level. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | No | UUID of the task or subproject; give either uuid or uuids. After a rillsoft_task_split one UUID stands for every part of that task, and they then move together | |
| uuids | No | UUIDs of several elements that move together. This is the only way to move a display row built from different tasks in one piece; a nested selection is resolved for you, so a child moves with its subproject | |
| number | No | narrows an ambiguous UUID down to one part; only together with uuid | |
| position | No | zero-based target position below the parent; empty appends at the end | |
| direction | No | a relative step by one display row, as in the user interface. Only together with uuid. Where the element sits at the edge already, the answer is moved:false and no undo step is created | |
| newParentUuid | No | UUID of the new parent subproject; empty keeps the current parent and changes the position only | |
| extractFromSubproject | No | true = one level up, below the grandparent |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | No | WBS code |
| name | No | name |
| uuid | No | UUID of the element |
| moved | Yes | false = the row was already at the edge; 'reason' says why |
| start | No | start, DD.MM.YYYY hh:mm |
| finish | No | finish, DD.MM.YYYY hh:mm |
| number | No | number of the element; unique even for split tasks |
| reason | No | why nothing was moved; only with moved:false |
| elements | No | all moved elements with their new parent |
| parentUuid | No | UUID of the parent project or subproject |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond the annotations: WBS codes are reassigned, dependencies and assignments survive, display rows split cleanly when partially moved, portfolio-level restrictions apply, direction can reorder projects at portfolio level, and the operation is one undo step. Annotations only give basic flags, so the description carries useful operational detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and parameter rule, then layered with behavioral details. It is appropriately sized for a complex move operation, though the abbreviation 'RP' is unexplained and a couple of clauses could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, output schema, and annotations, the description covers the key behavioral constraints an agent needs: parameter combination rules, data preservation, undo behavior, display-row integrity, and portfolio limitations. Nothing critical appears missing for correct 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?
Schema coverage is 100%, so the schema already documents parameters in detail. The description still adds meaning by tying 'position' to 'newParentUuid', clarifying the role of 'direction' for portfolio-level project reordering, and explaining the element concept for uuid/uuids, though much of the combination logic is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Moves elements') and clarifies that an element is a task or subproject, which helps distinguish the resource. However, it does not explicitly differentiate from siblings like rillsoft_element_reorder, so an agent may still need to infer which move/reorder 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?
The description gives clear parameter combination rules ('exactly one of position with newParentUuid, direction, or extractFromSubproject') and some portfolio context, but it does not state when to use this tool instead of alternatives such as rillsoft_element_reorder or rillsoft_element_subproject_group. Usage is largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_element_reorderReorder childrenAIdempotent
Reorders every direct child of a subproject completely and deterministically; a child is an element, meaning a task or a subproject. RP reassigns the WBS codes. An order that separates a display row is refused and names the UUIDs affected. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| parentUuid | No | UUID of the subproject; empty = the main project | |
| dissolveRows | No | true = an order that separates a display row dissolves that row instead of being refused (defaults to false) | |
| orderedUuids | Yes | every direct child of the parent in the order wanted, each of them exactly once |
Output Schema
| Name | Required | Description |
|---|---|---|
| children | Yes | the direct children in their new order |
| parentUuid | Yes | UUID of the project or subproject whose children were reordered |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses behavior well beyond the annotations: WBS codes are reassigned, an order that separates a display row is refused and names affected UUIDs, dissolveRows can override that refusal, and the operation is a single undo step. These are concrete mutation and error-handling details an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and packs important constraints into compact sentences. Every sentence contributes operational meaning without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition covers what the tool does, its mutation behavior, refusal condition, override option, and undo semantics. With an output schema and annotations present, it is largely complete; the main missing element is explicit guidance on when to choose this tool over sibling reorder/move tools.
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 parameters are already documented. The description adds some useful context by defining what a 'child' is, but most parameter-level meaning is already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Reorders') and resource ('every direct child of a subproject'), then defines a child as a task or subproject. This is precise enough to distinguish it from more general element movement or project sorting 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?
The description explains the operation and its refusal behavior, but it does not say when to use this tool instead of alternatives such as rillsoft_element_move or rillsoft_project_sort. Usage is only implied by the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_element_subproject_groupGroup elements into subprojectA
Creates a subproject and pulls the named elements into it - an element being a task or a subproject. This groups elements that already exist; creating an empty subproject goes through rillsoft_subproject_create. In a portfolio the elements must lie inside a project - at portfolio level a new subproject would be a project, which the user interface does not offer either. One undo step, which takes the new subproject away again as well. The answer names the new subproject (uuid, wbs) and the elements that were moved.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | name of the new subproject; left empty it takes the name of the element where there is exactly one, and stays empty otherwise | |
| uuid | No | shorthand for a single element | |
| uuids | No | UUIDs of the elements that move into the new subproject; all of them below the same project or subproject |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| elements | Yes | the elements grouped into the new subproject |
| parentUuid | Yes | UUID of the parent project or subproject |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, and idempotent=false, so the safety profile is covered. The description adds genuinely new context: single-undo semantics that also remove the new subproject, and the portfolio-level restriction. It does not discuss permissions/auth, keeping it short of 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?
Front-loads the core action, then the alternative, then constraints, undo, and return content. Every sentence carries information, though the prose is dense and slightly run-on, costing some readability.
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 an output schema present, the description covers the alternative path, the portfolio precondition, undo behavior, and the shape of the response. An agent has everything needed to invoke 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 uuid/uuids/name semantics are already documented in the schema. The description only restates that elements are named and adds that an element is a task or subproject, adding marginal value over the structured 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?
States a specific compound action (creates a subproject and pulls named elements into it) and defines 'element' as a task or subproject. It also names the sibling it is NOT (rillsoft_subproject_create for empty subprojects), so an agent can distinguish it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the empty-subproject case to rillsoft_subproject_create and states the portfolio-level precondition (elements must lie inside a project, since a portfolio-level subproject would be a project). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_fixed_element_listList fixed elementsARead-onlyIdempotent
Lists every fixed element of the project - an element here being a task, a milestone or a subproject - whose dates are pinned. These are exactly the elements rillsoft_project_reschedule leaves in place - to reschedule a project freely, release them first through rillsoft_task_update or rillsoft_subproject_update with fixed:false. projectFixed reports the same for the main project. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | number of fixed elements |
| projectFixed | Yes | true = the main project itself is fixed |
| fixedElements | Yes | all fixed tasks, milestones and subprojects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds context beyond the annotations: 'Read-only, no undo step' clarifies there is no history entry, and the explanation of fixed elements' relationship to rescheduling provides domain-specific behavioral insight. However, it does not describe output shape or pagination, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences and front-loads the core purpose before elaborating on rescheduling context and the read-only note. Every sentence adds value, though the projectFixed aside is slightly tangential. It remains tighter than most definitions without sacrificing necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters, an output schema, and full annotations, the description is complete. It explains the domain concept, the tool's role in the rescheduling workflow, and safety behavior. Nothing an agent needs in order to call this tool 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 score is 4. The description does not introduce any parameters and instead focuses on semantics and usage, which is correct for a parameterless tool. No additional parameter meaning is 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?
The description states a specific verb (Lists), resource (fixed element of the project), and defines the element types (task, milestone, subproject) whose dates are pinned. It explicitly distinguishes from sibling rillsoft_project_reschedule by describing the exact relationship between them. An agent can identify the tool's purpose without opening any 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?
It names the alternative behavior (reschedule leaves fixed elements in place) and points to the tools needed to change state (rillsoft_task_update or rillsoft_subproject_update with fixed:false). The condition for using this tool is clear: to find fixed elements before attempting a free reschedule. It also notes the main project equivalent via projectFixed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_folder_ris_createCreate RIS folderA
Creates a subfolder in the project folder tree of the logged-in client on the Rillsoft Integration Server - the 'New folder' button of the folder dialog. Takes effect on the server at once: no undo step; rillsoft_folder_ris_delete removes it. An unknown parent is refused before anything is sent. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the new folder | |
| parentFolderId | Yes | id of the folder the new one goes into, from rillsoft_folder_ris_list; root folders cannot be created |
Output Schema
| Name | Required | Description |
|---|---|---|
| left | Yes | left index of the nested-set tree |
| name | Yes | name of the folder |
| path | Yes | names from the root, joined by ' / ' |
| uuid | Yes | UUID of the folder |
| depth | Yes | 0 at a root folder, 1 below it, and so on |
| right | Yes | right index of the nested-set tree |
| folderId | Yes | id of the folder on the server; what the other folder tools and rillsoft_project_ris_save_as take |
| description | Yes | description; empty when none is set |
| folderCount | Yes | subfolders directly below this folder |
| projectCount | Yes | projects lying directly in this folder (subfolders not counted) |
| parentFolderId | No | id of the parent folder; missing at a root folder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that the change is immediate with no undo step, names the inverse tool, states the pre-flight validation behavior for an unknown parent, and pins the auth context to the logged-in desktop session. Annotations (destructiveHint=false, idempotentHint=false) are consistent with a create that destroys nothing itself and is reversed by delete.
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?
Purpose is front-loaded in the first clause, followed by effect, reversal, validation, and auth context — four compact sentences with no filler. Slightly dense but every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema, the description covers what it does, its side effects, reversal path, validation failure mode, and execution identity. 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?
Schema description coverage is 100% and both parameters (name, parentFolderId) are documented in the schema, including the 'root folders cannot be created' constraint. The description adds no format, syntax, or naming-rule detail beyond that, 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 and resource ('Creates a subfolder in the project folder tree') plus the exact UI affordance it mirrors, so an agent can identify it against rillsoft_folder_ris_list/update/move. It explicitly names rillsoft_folder_ris_delete as the reversal path, sharpening the distinction from siblings.
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 clear operating context: immediate server effect, reversal only through rillsoft_folder_ris_delete, and that an unknown parent is rejected pre-send. It stops short of explicit 'use X when Y' routing for the other folder siblings (list, update, move).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_folder_ris_deleteDelete RIS folderADestructiveIdempotent
Deletes an empty project folder of the logged-in client on the Rillsoft Integration Server - the 'Delete folder' button of the folder dialog. A folder that still holds subfolders or projects is refused (ris_folder_not_empty); nothing disappears silently. The server deactivates the folder (soft delete). Takes effect at once: no undo step. rillsoft_folder_ris_create is the counterpart. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| folderId | Yes | id of the folder, from rillsoft_folder_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | always true - a failure is an error, not a false |
| folderId | Yes | id of the folder that was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructive=true, idempotent=true, openWorld=true), and the description adds real value beyond them: it is a soft delete (server deactivates the folder), there is no undo, it takes effect immediately, nothing is removed silently, and it runs under the desktop session login. It also surfaces the specific error code for the refusal case.
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?
Front-loaded with the action and scope, and every clause carries information (UI mapping, refusal rule, soft-delete semantics, irreversibility, counterpart, auth context). It runs to six short clauses, which is a touch verbose, but no sentence 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?
Covers scope, precondition/refusal behavior, side effects, reversibility and execution context. An output schema exists so return values need not be described, and the annotations carry the safety hints, leaving nothing an agent needs 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?
Schema description coverage is 100% and the single folderId parameter is already documented with its origin (rillsoft_folder_ris_list). The description adds no syntax, format or constraint detail about the parameter, so the baseline of 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?
States a specific verb and resource ('Deletes an empty project folder ... on the Rillsoft Integration Server') with scope (logged-in client, empty folders only). It also names the sibling counterpart (rillsoft_folder_ris_create), so it is distinguishable from the other delete tools in the family.
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?
Explicit when-not condition: a folder holding subfolders or projects is refused with ris_folder_not_empty. It names the counterpart tool rillsoft_folder_ris_create and points at rillsoft_folder_ris_list as the source of folderId, giving the agent clear routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_folder_ris_listList RIS foldersARead-onlyIdempotent
Lists the project folder tree of the logged-in client on the Rillsoft Integration Server - the tree of the 'Open from database' dialog - with parentFolderId, path and depth per folder, so no nested-set arithmetic is needed; the folderId is what rillsoft_project_ris_save_as and the other folder tools take. Not the DMS folder tree of the documents (rillsoft_document_ris_list). Runs with the login of the desktop session. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| permission | No | only folders the logged-in user holds this permission for; project_read is the default | project_read |
Output Schema
| Name | Required | Description |
|---|---|---|
| server | Yes | URL of the Rillsoft Integration Server the desktop session is logged in to |
| folders | Yes | every folder the permission allows, in tree order (root first, children right after their parent) |
| clientId | Yes | id of the logged-in client; -1 while none is selected |
| userName | Yes | user name of the desktop session |
| permission | Yes | the permission the tree was filtered by |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so safety is covered. The description still adds genuine context: it runs under the desktop session login, corresponds to a specific dialog, and restates that there is no undo step. It stops short of describing pagination or tree-size limits, so not 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?
Front-loaded with purpose, then exclusions, then auth/behavior — a sensible order with little waste. 'Read-only, no undo step' partially duplicates the annotations, which keeps it from being maximally tight.
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 an output schema present it needn't explain return values, and it doesn't over-explain them. Purpose, routing to the correct sibling, the consuming tools, and the auth/session context are all present, leaving nothing an agent needs before calling.
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% and the single 'permission' enum is fully documented in the schema (default project_read, meaning of each value). The description says nothing further about the parameter, so the baseline 3 for schema-does-the-work 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 and resource ('Lists the project folder tree'), identifies the concrete UI surface ('the tree of the Open from database dialog'), and lists the returned fields (parentFolderId, path, depth). It also names the sibling it is NOT (rillsoft_document_ris_list) so the agent can distinguish it without opening a 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?
Provides an explicit exclusion ('Not the DMS folder tree of the documents (rillsoft_document_ris_list)') and states the downstream consumers of the output, naming rillsoft_project_ris_save_as and 'the other folder tools'. That covers both when to use it and where its output flows, which is exactly what routes an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_folder_ris_moveMove RIS folderAIdempotent
Moves a project folder of the logged-in client on the Rillsoft Integration Server under another folder or next to it, with its subfolders and projects - dragging in the folder dialog, plus the sibling positions the server offers. A folder cannot go under itself or one of its subfolders (ris_folder_cycle). Renaming is rillsoft_folder_ris_update; a project changes its folder through rillsoft_project_ris_save_as. Takes effect at once: no undo step. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| folderId | Yes | id of the folder to move, from rillsoft_folder_ris_list | |
| position | No | where it lands relative to targetFolderId; last_child (the default) is what dragging in the dialog does | last_child |
| targetFolderId | Yes | the folder it is placed under (first_child, last_child) or next to (prev_sibling, next_sibling) |
Output Schema
| Name | Required | Description |
|---|---|---|
| left | Yes | left index of the nested-set tree |
| name | Yes | name of the folder |
| path | Yes | names from the root, joined by ' / ' |
| uuid | Yes | UUID of the folder |
| depth | Yes | 0 at a root folder, 1 below it, and so on |
| right | Yes | right index of the nested-set tree |
| folderId | Yes | id of the folder on the server; what the other folder tools and rillsoft_project_ris_save_as take |
| description | Yes | description; empty when none is set |
| folderCount | Yes | subfolders directly below this folder |
| projectCount | Yes | projects lying directly in this folder (subfolders not counted) |
| parentFolderId | No | id of the parent folder; missing at a root folder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write/idempotent/non-destructive, and the description adds real behavioral context: 'Takes effect at once: no undo step', the cycle restriction, and that it runs under the desktop session login. It stops short of describing server-side error behavior or side effects on contained projects beyond the move itself.
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?
Front-loads the core action, and each clause carries information (scope, alternative tools, constraint, immediacy, session). The 'dragging in the folder dialog, plus the sibling positions the server offers' fragment is slightly loose, but overall it is efficient rather than padded.
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 an output schema present, 100% param coverage, and rich annotations, the description only needs to add routing and behavioral caveats — which it does, including the no-undo warning and the clone/cycle rule. An agent has everything needed 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 folderId, targetFolderId, and the position enum are already fully documented. The description gestures at the semantics ('under another folder or next to it', 'the sibling positions the server offers') but adds little beyond the schema's own worst-case detail.
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?
Starts with a specific verb+resource ('Moves a project folder ... on the Rillsoft Integration Server') and clarifies the scope (with subfolders and projects, under or next to a target). It actively distinguishes itself from siblings by naming rillsoft_folder_ris_update for renaming and rillsoft_project_ris_save_as for changing a project's folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: renaming belongs to rillsoft_folder_ris_update, and moving a project to another folder belongs to rillsoft_project_ris_save_as. It also states the condition that selects this tool (reparenting/reordering a folder) and the constraint case (ris_folder_cycle).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_folder_ris_updateRename RIS folderAIdempotent
Renames a project folder of the logged-in client on the Rillsoft Integration Server - editing the label in the folder dialog. The same name again sends nothing. Moving a folder is rillsoft_folder_ris_move. Takes effect on the server at once: no undo step. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | new name | |
| folderId | Yes | id of the folder, from rillsoft_folder_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| left | Yes | left index of the nested-set tree |
| name | Yes | name of the folder |
| path | Yes | names from the root, joined by ' / ' |
| uuid | Yes | UUID of the folder |
| depth | Yes | 0 at a root folder, 1 below it, and so on |
| right | Yes | right index of the nested-set tree |
| folderId | Yes | id of the folder on the server; what the other folder tools and rillsoft_project_ris_save_as take |
| description | Yes | description; empty when none is set |
| folderCount | Yes | subfolders directly below this folder |
| projectCount | Yes | projects lying directly in this folder (subfolders not counted) |
| parentFolderId | No | id of the parent folder; missing at a root folder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral facts beyond the annotations: changes take effect on the server immediately, there is no undo step, and the call runs under the desktop session login (auth context). The idempotency note ('the same name again sends nothing') usefully reinforces idempotentHint=true. It omits error/edge-case behavior for a rename, which keeps it short of 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?
Front-loaded with the verb and resource, then a sequence of short, information-dense sentences covering the no-op case, the alternative tool, permanence, and auth. No filler or restatement of the title.
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?
An output schema exists, so return values need not be explained, and the annotations cover the safety profile. For a two-parameter rename with a fully documented schema, the description supplies everything an agent needs: scope, permanence, idempotency, the sibling to use for moving, and the auth context.
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% ('new name', 'id of the folder, from rillsoft_folder_ris_list'), so the schema already carries parameter meaning. The description adds only the framing that this edits the folder's label; no additional format or constraint detail. Baseline 3 applies when the schema does the heavy lifting.
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 (renames a project folder on the Rillsoft Integration Server) plus scope (logged-in client) and clarifies it is a label edit, not a general update. It explicitly disambiguates from the closest sibling ('Moving a folder is rillsoft_folder_ris_move'), so an agent can route correctly without opening any 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?
Provides a concrete alternative for the ambiguous case by naming rillsoft_folder_ris_move, and notes that re-sending the same name is a no-op. It does not explicitly say when to use this vs. folder_ris_create/delete/list, but those are unambiguous from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_history_redoRedo commandA
Redoes the undo step taken back last and reports the command that was redone. The counterpart to rillsoft_history_undo; it restores the step and takes nothing away, which is why it carries no destructive hint. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | hints RP would otherwise show as a window; missing when there were none |
| command | Yes | name of the command that was undone or redone |
| moreRedo | Yes | true = there is more to redo |
| moreUndo | Yes | true = there is more to undo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and readOnlyHint=false; the description usefully explains the rationale ('restores the step and takes nothing away') and that the redone command is reported. It does not address the non-idempotent hint or how the redo stack behaves, so it adds moderate rather than rich context.
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 action and immediately followed by the sibling relationship. The trailing fragment 'One undo step.' is terse but earns its place by bounding the scope.
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 an output schema covering the returned command and annotations covering the safety profile, the description only needs purpose and counterpart context, both of which it supplies. Remaining gaps (redo-stack state, empty-stack behavior) are minor for a zero-parameter 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?
The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. Its scope note 'One undo step' correctly signals that no step identifier or count is accepted.
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 ('Redoes') plus the exact resource ('the undo step taken back last') and names the sibling it is the counterpart of, rillsoft_history_undo. An agent can distinguish this from the undo tool without opening either 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?
Explicitly frames itself as the counterpart to rillsoft_history_undo, which tells the agent it is the reverse operation used after an undo. It does not state any exclusion (e.g. what happens when the redo stack is empty), so it stops short of full 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.
rillsoft_history_undoUndo commandADestructive
Undoes the last undo step, including changes made in the user interface, and reports the command that was undone. It walks the command history of the open project; it is not a way to undo a save, and the resource pool has no undo step at all - there the unit of work is closed without saving instead. Taking the step back again goes through rillsoft_history_redo. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | hints RP would otherwise show as a window; missing when there were none |
| command | Yes | name of the command that was undone or redone |
| moreRedo | Yes | true = there is more to redo |
| moreUndo | Yes | true = there is more to undo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds genuine context beyond that: it reports the undone command, scopes the operation to the open project's history, and discloses boundary behavior for saves and the resource pool.
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 compact sentences, front-loaded with the core action and then the boundaries. Mostly efficient, though 'including changes made in the user interface' is slightly opaque and adds little.
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?
An output schema exists, so return values need not be explained, and there are no parameters to document. The description covers scope and edge cases well; only the minor opening ambiguity keeps it from full marks.
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 no parameter surface for the description to clarify or obscure, and 'One undo step' usefully signals that a single call performs exactly one step.
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 (undo the last command in the open project's history) and explicitly distinguishes itself from the redo sibling and from save-undo. The opening phrase 'Undoes the last undo step' is mildly ambiguous (it could read as a redo), but the following sentences resolve 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?
Explicit when-to-use (walks the command history of the open project), when-not (not a way to undo a save; the resource pool has no undo step and instead closes the unit of work without saving), and names the alternative path (rillsoft_history_redo). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_machine_sharing_createShare machineADestructiveIdempotent
Lets several tasks share one machine or machine role: the individual assignments go away and the resource is consumed once instead of n times - one crane used by three tasks is one crane. Beware, this loses information: quantity and utilization of the shared entry are the maximum over all participants, exactly as in the 'Share' menu. rillsoft_machine_sharing_release is therefore not an inverse - a task taken back out gets the shared value, not its original one. Afterwards the resource appears in rillsoft_project_tree_get under sharedAssignments[] and no longer under machineAssignments[] or machineRoleAssignments[]. In a portfolio all tasks must belong to the same project - shared use stays within one project. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | shared use is computed for these two kinds only | |
| taskUuids | Yes | UUIDs of the tasks that shall share the resource from now on; each of them has to carry it on its own today | |
| resourceId | Yes | id of the machine role or machine from rillsoft_resource_pool_catalog_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | kind of the shared resource |
| tasks | Yes | the tasks involved after the change |
| resourceId | Yes | id of the machine role or machine |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive and idempotent, but the description adds substantial behavioral detail: information loss, the shared value being the maximum over participants, the non-inverse relationship with release, the move of the resource from machineAssignments to sharedAssignments, and the single undo step. This is exactly the kind of context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, leading with the core operation before the caveats. Every sentence carries useful information, though it is longer than strictly necessary and could be tightened slightly without losing meaning.
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 an output schema present, the description need not explain return values. It fully covers side effects, constraints, reversibility, and post-condition state changes, leaving an agent well equipped to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description reinforces the constraint that each task must already carry the resource and that the type is limited to machine or machine_role, but adds little syntax or format detail beyond the schema baseline.
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 ('Lets several tasks share one machine or machine role') and immediately distinguishes the operation from sibling tools like rillsoft_machine_sharing_release. An agent can identify exactly what this tool does 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?
It gives clear context for use ('several tasks share one machine') and constraints such as 'each of them has to carry it on its own today' and 'all tasks must belong to the same project.' It also warns that rillsoft_machine_sharing_release is not the inverse, which helps prevent misuse. It lacks an explicit when-not or alternative tool recommendation beyond that contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_machine_sharing_releaseRelease shared useADestructiveIdempotent
Takes one task back out of shared use: it gets its individual assignment back, carrying the shared value rather than its original one (see rillsoft_machine_sharing_create). Once the last task is gone, the shared entry disappears. The counterpart of the 'Exclusive' menu entry; one undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | kind of the shared resource | |
| taskUuid | Yes | UUID of the task that shall carry the resource on its own again | |
| resourceId | Yes | id of the machine role or machine from rillsoft_resource_pool_catalog_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | kind of the shared resource |
| tasks | Yes | the tasks involved after the change |
| resourceId | Yes | id of the machine role or machine |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true and readOnly=false, so the safety profile is covered. The description adds genuinely non-obvious semantics beyond that: the task regains its individual assignment but carries the shared value rather than its original one, and the shared entry vanishes once the last task is released. That 'original value is not restored' nuance is exactly the kind of context annotations cannot convey.
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 tight clauses, front-loaded with the core action and the resulting state before the sibling reference and undo note. No filler, though the parenthetical cross-reference and menu-name aside are slight extras.
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?
An output schema exists, so return values need not be explained, and the description covers outcome, side effect on the shared entry, reversibility, and the sibling relationship. The only gap is error/edge behavior when the task is not currently in shared use.
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 three parameters are already documented in the schema and the baseline is 3. The description hints at the single-task scope ('one task', 'the shared entry') but adds no format or enum detail beyond what the schema supplies.
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 ('Takes one task back out of shared use') and immediately gives the resulting state, distinguishing it from the create counterpart by name. An agent can tell exactly what this does and which sibling mirrors it without opening a 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?
Explicitly names rillsoft_machine_sharing_create as the counterpart and frames this as the 'Exclusive' menu entry's opposite plus a single undo step, which tells the agent when this tool applies. It stops short of stating when NOT to use it (e.g., what happens if the task is not currently shared).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_outline_applyApply outline stateARead-only
Expands or collapses the visible resource or capacity view - the same effect as the expand and collapse buttons of the ribbon. Give exactly one of outline and openRows; openRows restores a state read before, row by row, which outline alone cannot do once someone has opened rows by hand. In any other view the call fails and points at rillsoft_view_state_apply. No undo step and no change to the plan itself - no task, no assignment, no date moves; that is why this tool counts as read-only. What it does change is the way the project is displayed: the outline state is stored with the project, and going through the user interface marks the document as changed, so a later save writes the new state along. It answers like rillsoft_outline_get.
| Name | Required | Description | Default |
|---|---|---|---|
| outline | No | collapsed closes everything, level_1 to level_3 open down to that level, expanded opens everything. step_expand and step_collapse move one step, exactly like the ribbon buttons - they depend on where the view stands and are therefore not repeatable. Give either this or openRows | |
| openRows | No | exactly these group rows end up open, every other one closed. Give either this or outline |
Output Schema
| Name | Required | Description |
|---|---|---|
| levels | Yes | the grouping levels of the view, outermost first |
| outline | Yes | the absolute state where the view is in one, otherwise mixed |
| openRows | Yes | every group row that is open, in display order. Pass the array back to rillsoft_outline_apply to restore exactly this state |
| canExpand | Yes | true = something is still left to expand |
| canCollapse | Yes | true = something is still left to collapse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by resolving their apparent tension: it explains why a tool that mutates stored display state counts as read-only (no undo step, no task/assignment/date changes) and warns that the outline state persists with the project and a later save writes it along. It also flags non-repeatability of step_expand/step_collapse due to view-dependent state, matching idempotentHint=false.
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?
Front-loads the core effect in the first sentence before the exclusivity rule and the behavioral caveats. It is dense and slightly long, and the 'that is why this tool counts as read-only' clause retreads the readOnlyHint, but each sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, oneOf-constrained tool with an output schema and full annotation coverage, the description supplies everything an agent needs: the exclusivity rule, the failure mode on wrong views, the persistence side effect, and a pointer to the analogous get tool for the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the enum values and exclusivity, so baseline is 3. The description adds the rationale the schema lacks: openRows exists specifically to replay a state read beforehand when rows were opened by hand, and the two step values move one step rather than to an absolute state.
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 ('expands or collapses the visible resource or capacity view') and grounds it in a concrete UI analogue ('the same effect as the expand and collapse buttons of the ribbon'). It distinguishes itself from siblings by naming rillsoft_view_state_apply as the tool for other views, and 'answers like rillsoft_outline_get' ties it to its read counterpart.
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?
Explicit mutual exclusion ('Give exactly one of outline and openRows') plus the condition that selects openRows over outline ('restores a state read before, row by row, which outline alone cannot do'). It also names the fallback tool and the failure condition ('In any other view the call fails and points at rillsoft_view_state_apply'), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_outline_getRead outline stateARead-onlyIdempotent
Reads how far the visible resource or capacity view is expanded: outline names the absolute state where the view is in one (collapsed, level_1 to level_3, expanded) and mixed where it is not, openRows[] names every group row that is open in the same coordinates the report uses per row, levels[] gives the grouping of the view outermost first, and canExpand and canCollapse say whether anything is left to do. In any other view the call fails and points at rillsoft_view_state_apply. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| levels | Yes | the grouping levels of the view, outermost first |
| outline | Yes | the absolute state where the view is in one, otherwise mixed |
| openRows | Yes | every group row that is open, in display order. Pass the array back to rillsoft_outline_apply to restore exactly this state |
| canExpand | Yes | true = something is still left to expand |
| canCollapse | Yes | true = something is still left to collapse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so safety is covered; 'Read-only, no undo step' is largely redundant. The real added value is the disclosed failure mode (call fails in views other than the visible resource/capacity view) and the error-routing to rillsoft_view_state_apply, which annotations do not convey.
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?
Purpose is front-loaded, but the long colon-delimited run-on enumerating outline/openRows/levels/canExpand/canCollapse restates what the output schema already documents, so several clauses do not earn their place. The key operational fact (failure in other views) is buried at the end.
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 annotations covering safety, an output schema covering return values, and no parameters, the description only needs to frame the tool and its constraints. It does so, adding the view-scoped failure behavior and the correct fallback sibling, so it is essentially complete aside from not routing to outline_apply.
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. The description goes further by naming the returned fields, but that duplicates the output schema rather than clarifying any input semantics.
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 ('Reads how far the visible resource or capacity view is expanded') and enumerates the exact output fields (outline, openRows[], levels[], canExpand, canCollapse). This is clearly a read of outline state, but it never explicitly contrasts itself with the closest siblings (rillsoft_outline_apply / rillsoft_outline_row_apply), leaving that inference to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit when-not condition: in any other view the call fails and routes the agent to rillsoft_view_state_apply. That names an alternative and the condition that selects it. It does not, however, spell out the read-vs-apply workflow with outline_apply, so guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_outline_row_applyApply outline state of one rowARead-onlyIdempotent
Opens or closes one single group row of the visible resource or capacity view - the same effect as clicking the plus or minus in front of it. Every other row keeps its state, which is what sets this apart from rillsoft_outline_apply. Rows that become visible this way can be opened the same way, level by level. A row already in the wanted state is left alone and reported back, so the call can be repeated. A row whose parent is still closed is not addressable; open the parent first. In any other view the call fails and points at rillsoft_view_state_apply. Like a click it moves the selection to that row and the property sheet of the info window follows. No undo step and no change to the plan itself - no task, no assignment, no date moves; that is why this tool counts as read-only. What it does change is the way the project is displayed: the outline state is stored with the project, and going through the user interface marks the document as changed, so a later save writes the new state along. It answers like rillsoft_outline_get.
| Name | Required | Description | Default |
|---|---|---|---|
| row | Yes | coordinates of the group row to open or close, as rillsoft_outline_get reports them under openRows | |
| action | Yes | expand opens the row, collapse closes it |
Output Schema
| Name | Required | Description |
|---|---|---|
| levels | Yes | the grouping levels of the view, outermost first |
| outline | Yes | the absolute state where the view is in one, otherwise mixed |
| openRows | Yes | every group row that is open, in display order. Pass the array back to rillsoft_outline_apply to restore exactly this state |
| canExpand | Yes | true = something is still left to expand |
| canCollapse | Yes | true = something is still left to collapse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains why readOnlyHint=true is not contradictory (no task/assignment/date changes, no undo step) while still disclosing the side effect that outline state is persisted with the project and marks the document as changed, so a later save writes it. It also confirms idempotency behavior and notes the selection and property sheet follow, like a click.
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?
Front-loaded with the core action and the sibling differentiation, and nearly every sentence carries information. It is on the long side, with some restatement around the read-only rationale ('no task, no assignment, no date moves'), which costs a point.
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, nested-object tool with an output schema and full annotation coverage, the description covers behavior, prerequisites, side effects, failure routing and return shape reference ('answers like rillsoft_outline_get'). Nothing an agent needs to invoke 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?
Schema description coverage is 100% and the nested row object documents every coordinate field, so the baseline is 3. The description adds contextual meaning about addressability (parent must be open) but no new syntax or format detail for the parameters themselves.
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: opens or closes one single group row of the visible resource or capacity view, equivalent to clicking the plus/minus. It explicitly contrasts itself with rillsoft_outline_apply, so the agent can separate the two without opening either 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 explicit when-to-use (single row vs rillsoft_outline_apply's whole-outline effect), prerequisites (a row whose parent is closed is not addressable; open the parent first), and a failure route (other views fail and point at rillsoft_view_state_apply). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_portfolio_file_openOpen portfolio fileADestructiveIdempotent
Opens exactly one file portfolio (.rpp), which is a list of project files, and replaces the current project. A single project file (.rpj) is refused; rillsoft_project_file_open covers that. The answer carries portfolio:true and projects[] (uuid, name, path, readOnly); lines of the .rpp that point nowhere end up in skipped[], anything else the loader has to say in note. Inside a portfolio the tools work as in a single project, with the limits of the user interface: nothing is created directly below the portfolio, no task or subproject changes its project, no dependency crosses the project boundary in a file portfolio, no baseline, no 'save as'; rillsoft_portfolio_project_files_save writes the changed projects back. No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | absolute path of an .rpp portfolio file | |
| discardChanges | No | true = discard unsaved changes of the current project |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| note | No | hints about opening; missing when there were none |
| path | Yes | path of the file that was opened |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| skipped | No | parts that were not loaded; missing when nothing was skipped |
| projects | No | the projects it contains; only for a portfolio |
| portfolio | Yes | true = a portfolio was opened |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint/readOnlyHint, but the description adds substantive behavior: the current project is replaced wholesale, the .rpp is refused if it is a single project, there is no undo, and inside a portfolio no creation below the portfolio, no cross-boundary dependencies, no baseline and no 'save as' are permitted. This is well beyond what annotations convey.
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 core action and the sibling split are front-loaded in the first two sentences, and the remaining sentences each carry a distinct constraint. It is dense and long, but little of it 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?
For a destructive, state-replacing open operation, the description covers refusal behavior, the no-undo consequence, portfolio-specific limits, and the follow-up save tool. Return fields (portfolio:true, projects[], skipped[], note) are restated even though an output schema exists, but the coverage is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema; the description only implies that path must point at an .rpp rather than an .rpj. Baseline 3 applies when the schema carries the parameter documentation.
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 ('Opens exactly one file portfolio (.rpp)') plus the scope caveat that it 'replaces the current project'. It explicitly distinguishes itself from rillsoft_project_file_open by noting that a .rpj is refused and that the sibling covers 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?
Gives an explicit when-not rule (.rpj is refused, use rillsoft_project_file_open) and names the companion write path (rillsoft_portfolio_project_files_save). It also warns 'No undo step', which directly shapes call decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_portfolio_project_files_saveSave portfolio project filesADestructiveIdempotent
Writes the projects of an open file portfolio back into their own .rpj files; only the locked, writable members are saved, and the answer names them under saved[]. The .rpp itself is never written - it is only the list of paths, and there is no 'save as' for it. Where a single project is open, the call is refused (use rillsoft_project_file_save). No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | hints about saving; missing when there were none |
| path | Yes | path of the portfolio file |
| saved | Yes | paths of the project files that were written |
| portfolio | Yes | always true; what gets saved are the project files it contains |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds real context beyond them: only locked, writable members are saved, the list file is untouched, and there is 'No undo step.' The saved[] naming and refusal conditions are useful. It stops short of describing partial-failure behavior or how writability/lock state is determined, so it is not exhaustive.
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 core action is front-loaded in the opening clause, and every sentence carries information: scope, refusal condition, alternative, and undo behavior. It is dense with semicolons and em-dashes but not padded with 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 an output schema present, return values need not be explained, and with zero parameters there is no input surface to document. Combined with annotations covering the destructive/idempotent profile, the description covers the refusal case, the scoping rule, and the lack of undo — everything needed to invoke 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?
Zero parameters, so the baseline is 4 and the description does not need to explain inputs. It redirects its detail to output/behavior semantics (saved[] naming) rather than parameter guidance, which 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?
States a specific verb and resource ('Writes the projects of an open file portfolio back into their own .rpj files') and immediately scopes it against siblings by declaring that the .rpp itself is never written and there is no 'save as' for it. An agent can distinguish this from rillsoft_project_file_save and rillsoft_portfolio_ris_save without opening any 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?
Explicitly states the negative case ('Where a single project is open, the call is refused') and names the exact alternative to use instead ('use rillsoft_project_file_save'). Both the when and the when-not are spelled out with a concrete route.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_portfolio_ris_createCreate RIS portfolioA
Creates a portfolio of the logged-in client on the Rillsoft Integration Server - the 'New' button of the portfolio dialog - with its kind, folders and projects. Takes effect on the server at once: no undo step; rillsoft_portfolio_ris_delete removes it, rillsoft_portfolio_ris_open loads it. A duplicate name and unknown folder or project ids are refused before anything is sent. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the new portfolio; must not be in use at the client | |
| combine | No | true = a summary project that may take part in cross-project merging; false = a project portfolio. Cannot be changed later | |
| folderIds | No | folders of the client whose projects belong to the portfolio, from rillsoft_project_ris_list | |
| projectIds | No | single projects of the client that belong to the portfolio, from rillsoft_project_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | name of the portfolio |
| note | No | hints, such as the portfolio being open right now; missing when there were none |
| uuid | Yes | UUID of the portfolio |
| projects | Yes | the projects the portfolio resolves to, folders included |
| folderIds | Yes | folders whose projects belong to the portfolio; empty when it lists projects only |
| isCombine | Yes | true = a summary project, false = a project portfolio |
| versionId | Yes | version of the portfolio record on the server |
| lockEnable | Yes | true = the server allows locking its projects |
| description | Yes | description; empty when none is set |
| portfolioId | Yes | id of the portfolio on the server; what _open, _update and _delete take |
| projectCount | Yes | number of projects the portfolio resolves to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the write/openWorld/idempotent profile; the description adds the important traits: it takes effect on the server immediately with no undo step, it runs under the desktop session login, and duplicate names or unknown folder/project ids are refused before anything is sent. This is substantially more than the annotations convey and consistent with them (destructive=false since it only adds a portfolio).
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?
Front-loaded with the verb and resource, then effect, alternatives, and validation in a compact block. Slightly dense with multiple clauses in one sentence, but every clause adds usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the remaining agent-relevant questions: immediacy, reversibility, authorisation context, validation failures, and related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented; the description only loosely restates 'its kind, folders and projects' without adding format or constraint detail beyond the schema. Baseline 3 is appropriate when the schema carries the weight.
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 (creates) and resource (portfolio of the logged-in client on the RIS), and anchors it to a known UI affordance (the 'New' button of the portfolio dialog). It also names sibling tools (delete/open) so the agent can place it in the portfolio lifecycle without opening schemas.
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?
Clear context for when this applies and what the natural follow-ups are: rillsoft_portfolio_ris_delete removes it and rillsoft_portfolio_ris_open loads it. It stops short of explicit exclusions (e.g., when to prefer update vs create), so it is strong context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_portfolio_ris_deleteDelete RIS portfolioADestructiveIdempotent
Deletes a portfolio of the logged-in client on the Rillsoft Integration Server - the 'Delete' button of the portfolio dialog. The server deactivates the portfolio record (soft delete); the projects stay untouched. The portfolio that is open right now is refused (portfolio_is_open; call rillsoft_project_create first). Takes effect at once: no undo step. rillsoft_portfolio_ris_create is the counterpart. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolioId | Yes | id of the portfolio, from rillsoft_portfolio_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | always true - a failure is an error, not a false |
| portfolioId | Yes | id of the portfolio that was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: it discloses that the delete is a soft delete (record deactivated, projects untouched), that it takes effect immediately with no undo, that an open portfolio is refused, and that it runs under the desktop session login. These are exactly the side-effect and precondition details an agent cannot infer from destructiveHint/idempotentHint alone.
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?
Front-loaded with the core action, then proceeds through side effects, refusal condition, reversibility, and session context. Every sentence contributes distinct information 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?
For a destructive single-parameter mutation with an output schema present, the description covers side effects, refusal behavior, reversibility, and execution context. Nothing needed to invoke 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?
Schema description coverage is 100% with a single parameter already documented as 'id of the portfolio, from rillsoft_portfolio_ris_list'. The description adds no additional parameter syntax or format detail, 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 and resource ('Deletes a portfolio of the logged-in client on the Rillsoft Integration Server') and identifies the exact UI affordance it mirrors. It also names the counterpart tool (rillsoft_portfolio_ris_create), so an agent can distinguish it from sibling mutations without opening a 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?
Provides a clear precondition (refused when the portfolio is open, with the portfolio_is_open error) and points to the counterpart create tool, giving real when-to-use context. The remediation hint 'call rillsoft_project_create first' is confusing and possibly incorrect for an open-portfolio state, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_portfolio_ris_listList RIS portfoliosARead-onlyIdempotent
Lists the portfolios of the logged-in client on the Rillsoft Integration Server - project portfolios and summary projects - with their folders, the projects they resolve to and the portfolioId that rillsoft_portfolio_ris_open takes. Runs with the login of the desktop session and never asks for credentials; the answer names server, userName and clientId. A portfolio file (.rpp) is opened through rillsoft_portfolio_file_open instead. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| combine | No | all (the default) lists both kinds, portfolio only project portfolios, combine only summary projects | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| server | Yes | URL of the Rillsoft Integration Server the desktop session is logged in to |
| clientId | Yes | id of the logged-in client; -1 while none is selected |
| userName | Yes | user name of the desktop session |
| portfolios | Yes | every portfolio of the client the user may read; at most 10000 projects in total, more than that is an error |
| openPortfolioId | No | portfolioId of the open document; only when it is a portfolio of this server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint false), and the description adds genuinely useful context beyond them: it runs under the desktop session login, never prompts for credentials, and returns server/userName/clientId. It also re-states read-only/no-undo, which is redundant with annotations but harmless.
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?
Purpose and scope are front-loaded, followed by the sibling routing and then the auth/return behavior. Slightly dense with clauses, but every sentence carries information relevant to calling or interpreting the 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?
An output schema exists, so return structure need not be explained, yet the description helpfully names key response fields. Combined with sibling routing and auth behavior, an agent has what it needs; only explicit exclusion conditions are 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?
Schema coverage is 100% and the single 'combine' enum parameter is fully documented in the schema itself, including the meaning of all, portfolio, and combine. The description adds no syntax or semantics for the parameter, so the 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?
States a specific verb and resource (lists the logged-in client's RIS portfolios, both project portfolios and summary projects) and explicitly distinguishes itself from the sibling rillsoft_portfolio_ris_open (which consumes the returned portfolioId) and rillsoft_portfolio_file_open (which opens .rpp files). An agent can route correctly without opening any 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 clear context for when to use it: to obtain portfolios plus the portfolioId that rillsoft_portfolio_ris_open requires, and explicitly names the alternative path for opening .rpp portfolio files. It does not state explicit exclusions (e.g. when not to call it or prerequisite session state), but the routing guidance is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_portfolio_ris_openOpen RIS portfolioADestructiveIdempotent
Opens a portfolio of the logged-in client from the Rillsoft Integration Server - all of its projects or a subset - and replaces the current document with a portfolio: the tools work there as in a single project, with the limits of the user interface (nothing directly below the portfolio, no task or subproject changes its project, a dependency across the project boundary becomes a RIS link, no baseline, no 'save as'; documents of the loaded projects can be listed, downloaded, updated and deleted, not created). Projects with a foreign resource pool or that cannot be read are left out and named in skipped. With unsaved changes pending, discardChanges:true is required. Saving goes back through rillsoft_portfolio_ris_save; a portfolio file is opened through rillsoft_portfolio_file_open instead. No undo step - the command history starts over. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| lock | No | optimistic (the default) takes no locks; pessimistic locks every loaded project that is not read-only on the server for this user until another document is opened - where a lock is already held by someone else, note[] says so | optimistic |
| projectIds | No | subset of the portfolio's projects to load; missing = every project, ordered by start date | |
| portfolioId | Yes | id of the portfolio, from rillsoft_portfolio_ris_list | |
| discardChanges | No | true = discard unsaved changes of the current document | |
| readOnlyProjectIds | No | projects to open read-only inside the portfolio (no lock, left out by rillsoft_portfolio_ris_save); must be among the loaded ones |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| lock | Yes | lock mode the projects were opened with |
| name | Yes | name of the portfolio |
| note | No | hints of the loader, such as locks that were not granted; missing when there were none |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| skipped | No | projectIds that were requested but not loaded - a foreign resource pool or an unreadable project; missing when none |
| clientId | Yes | id of the client the portfolio belongs to |
| projects | Yes | the projects that were loaded, in display order |
| isCombine | Yes | true = a summary project |
| portfolio | Yes | always true |
| portfolioId | Yes | id of the portfolio on the server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that the current document is replaced, the UI-imposed limits (nothing directly below the portfolio, cross-project dependencies become RIS links, no baseline, no 'save as'), which operations work on loaded project documents (list/download/update/delete, not create), that unreadable/foreign-pool projects are omitted and named in 'skipped', the discardChanges requirement, and that there is no undo because command history restarts. Matches the destructiveHint=true / idempotentHint=true annotations.
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?
Front-loaded with the core action, then dense but information-bearing caveats. The long parenthetical is heavy but each clause (limits, skipped projects, discardChanges, save path, undo) earns its place; only minor tightening is possible.
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 complex state-mutating tool with an output schema already present, the description covers side effects, limits, locking implications, skip behavior, the discardChanges prerequisite, redirects to the correct sibling tools, and the loss of undo. 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?
Schema description coverage is 100%, so the schema already documents lock, projectIds, discardChanges and readOnlyProjectIds. The description reinforces discardChanges:true behavior and references 'skipped', but adds little semantic detail beyond what the parameter descriptions already carry; 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 (Opens) and resource (portfolio of the logged-in client from the Rillsoft Integration Server), and explicitly distinguishes itself from siblings rillsoft_portfolio_file_open (opens a file) and rillsoft_portfolio_ris_save (saving). An agent can tell exactly what this does and how it differs from adjacent 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?
Names the alternatives and when they apply ('Saving goes back through rillsoft_portfolio_ris_save; a portfolio file is opened through rillsoft_portfolio_file_open instead') and gives the condition for discardChanges:true. Clear context, though it stops short of an explicit 'use this when / not when' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_portfolio_ris_saveSave RIS portfolioADestructiveIdempotent
Writes the open portfolio of the Rillsoft Integration Server back: every project that changed and is not read-only gets a new version on the server (saved names them), cross-project links and the portfolio's configuration, favourites and signature are written along, then the portfolio is reloaded from the server keeping its display state. Nothing changed means nothing written and a note. Refused where the open document is not a portfolio of the server (ris_portfolio_not_open; a single project is saved through rillsoft_project_ris_save, a portfolio file through rillsoft_portfolio_project_files_save). A link cycle stops the save and is named in note. Runs with the login of the desktop session. No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | version notes stored with every new project version; at most 2000 characters |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | hints, such as nothing having changed or a link cycle; missing when there were none |
| saved | Yes | the projects that were written as new versions - changed and not read-only; empty when nothing had changed |
| portfolioId | Yes | id of the portfolio on the server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantial context beyond them: versioning semantics (each changed project gets a new version), that links/configuration/favourites/signature are written, that the portfolio is reloaded while preserving display state, that it runs under the desktop session login, and critically that there is no undo step. It also names failure conditions (link cycle stops the save; refused when the open document is not a server portfolio).
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 core write semantics and the alternative-tool routing are front-loaded, and most clauses carry real information (failures, no-undo, session context). It is dense and long for one tool, with some run-on sentences, but little is pure 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?
An output schema exists so return formatting need not be explained, and annotations cover the safety profile. Given a single optional parameter, the description supplies the remaining essentials: precondition (open server portfolio), side effects and permanence, no-op behavior, error codes, and side conditions like link cycles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema fully documents `notes` including the 2000-character limit. The description references 'a note' and a cycle 'named in note', which are return/status messages rather than the parameter, so it adds no semantics for `notes` itself. 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?
States a precise verb+resource ('writes the open portfolio of the Rillsoft Integration Server back'), enumerates what is written (changed non-read-only projects, links, configuration, favourites, signature) and explicitly names the sibling tools it is not (rillsoft_project_ris_save, rillsoft_portfolio_project_files_save). An agent can distinguish it from adjacent save tools without opening a 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 explicit preconditions (an open portfolio of the server, otherwise ris_portfolio_not_open) and routes to the correct alternative for each non-matching case: single project via rillsoft_project_ris_save, portfolio file via rillsoft_portfolio_project_files_save. Also states the no-op case ('nothing changed means nothing written'), so when-to-use and when-not are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_portfolio_ris_updateUpdate RIS portfolioAIdempotent
Renames a portfolio of the logged-in client on the Rillsoft Integration Server and/or replaces its folder and project selection - the properties dialog and the in-place rename of the portfolio dialog. At least one of name, folderIds and projectIds is required; the kind (summary project or portfolio) cannot be changed. Takes effect on the server at once: no undo step. Where the portfolio is open right now, the change shows with the next rillsoft_portfolio_ris_open and note says so. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | new name | |
| folderIds | No | the folders the portfolio shall hold from now on (replaces the list; an empty list clears it) | |
| projectIds | No | the single projects the portfolio shall hold from now on (replaces the list; an empty list clears it) | |
| portfolioId | Yes | id of the portfolio, from rillsoft_portfolio_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | name of the portfolio |
| note | No | hints, such as the portfolio being open right now; missing when there were none |
| uuid | Yes | UUID of the portfolio |
| projects | Yes | the projects the portfolio resolves to, folders included |
| folderIds | Yes | folders whose projects belong to the portfolio; empty when it lists projects only |
| isCombine | Yes | true = a summary project, false = a project portfolio |
| versionId | Yes | version of the portfolio record on the server |
| lockEnable | Yes | true = the server allows locking its projects |
| description | Yes | description; empty when none is set |
| portfolioId | Yes | id of the portfolio on the server; what _open, _update and _delete take |
| projectCount | Yes | number of projects the portfolio resolves to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond the annotations: changes take effect on the server immediately with no undo step, open portfolios see the change only on the next rillsoft_portfolio_ris_open, and the call runs with the desktop-session login. These are the operational facts an agent needs before a mutation, and they do not contradict destructiveHint=false or idempotentHint=true.
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?
Dense but front-loaded: the rename/replace purpose comes first, then constraints, then side effects. The mention of the desktop UI dialogs is slightly padded for an agent audience but negligible.
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 4-parameter update tool with full schema coverage, an output schema, and safety annotations, the description covers everything material: required inputs, immutability of kind, immediacy/no-undo, visibility timing for open portfolios, and session context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds the cross-parameter constraint (at least one of name/folderIds/projectIds) which the schema does not express, but otherwise restates what the schema already documents about replacement semantics.
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 (renames / replaces selection) and resource (portfolio of the logged-in client on the Rillsoft Integration Server), and explicitly carves out what cannot be changed (the kind). It is distinguishable from siblings such as rillsoft_portfolio_ris_create/list/delete without opening any 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?
Explicitly says 'at least one of name, folderIds and projectIds is required' and that the kind cannot be changed, which rules out misuse. It stops short of naming which sibling to use when the kind must change or when the operation should be an open/save instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_conflict_listList conflictsARead-onlyIdempotent
Reads the six conflict lists of the info sheet as a flat YAML report: delayed (tasks lagging behind the status date), overload (overallocated resources), resourceLoss (failed resources), unassigned (unassigned resources), partiallyAssigned (partially assigned resources) and crossProjectDependencies (cross-project dependencies together with their float). The same selection as the tabs of that sheet; one task can appear in several lists. Numbers in hours, dates as everywhere else. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | narrows the report to one category; omit it to get all of them |
Output Schema
| Name | Required | Description |
|---|---|---|
| yaml | Yes | the conflict report as YAML, the same text as in content[0].text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description still adds real behavioral context beyond that: one task can appear in several lists (no deduplication), units are hours, dates follow the project convention, and there is no undo step. These are the kind of traits an agent cannot infer from annotations alone.
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 purpose is front-loaded and the trailing sentences are short and information-dense. The six-category enumeration makes the single sentence long, but each item earns its place by defining a selectable category, so it is informative rather than padded.
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?
An output schema exists, so return structure need not be described. Given a single optional enum parameter, the description covers scope, category semantics, overlap behavior, units, and read-only status — everything needed 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 coverage is 100% and the enum is self-documenting, so the baseline would be 3. The description goes further by explaining what each category actually means ('delayed (tasks lagging behind the status date)', 'overload (overallocated resources)', 'crossProjectDependencies ... together with their float'), which is semantic value the enum labels alone do not 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?
The description names a specific verb and resource ('Reads the six conflict lists of the info sheet as a flat YAML report') and then enumerates all six categories with a one-phrase gloss for each. This distinguishes it cleanly from sibling report tools such as rillsoft_analysis_report_get and rillsoft_variance_report_get without the agent needing to open any 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?
Usage is implied rather than stated: 'The same selection as the tabs of that sheet' tells the agent the categories correspond to UI tabs, and the schema says to omit 'category' for all lists. But there is no explicit when-to-use guidance versus the other reporting siblings (variance_report_get, analysis_report_get, resource_usage_list), nor any stated preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_createCreate projectADestructive
Creates a new empty project and replaces the one that is open. With unsaved changes pending, discardChanges:true is required. Opening an existing file goes through rillsoft_project_file_open. The command history starts over, so this call cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | name of the new project | |
| discardChanges | No | true = discard unsaved changes of the current project |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, but the description adds substantial context beyond them: it replaces the currently open project, discards unsaved changes when required, resets the command history, and cannot be undone. These consequences are exactly what an agent needs before invoking a destructive 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 tight sentences, front-loaded with the primary action and consequence. Every sentence carries distinct, non-redundant information (scope, parameter condition, alternative tool, irreversibility).
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?
An output schema exists so return values needn't be explained. Given the tool's destructive nature, the description covers reversibility, side effects on the open project, the parameter condition, and the alternative tool, leaving no meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters (baseline 3). The description adds real semantic value by stating the condition under which discardChanges must be true, which the schema's terse 'true = discard unsaved changes' does not 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+resource ('Creates a new empty project') and clarifies the scope by noting it 'replaces the one that is open.' It also distinguishes itself from the sibling rillsoft_project_file_open, which covers the different task of opening an existing file.
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 explicit conditional guidance ('With unsaved changes pending, discardChanges:true is required') and names the correct alternative tool for a related-but-distinct task ('Opening an existing file goes through rillsoft_project_file_open'). The agent knows both when to use this and when to route elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_file_export_xmlExport project as RIS XMLADestructiveIdempotent
Writes the open project into an .xml file in exactly the form the Rillsoft Integration Server receives on upload (rillprj version 13, UTF-8, stylesheet instruction). This is not the older 'save as XML' of the File menu, which follows its own settings. Where that file exists already, overwrite:true is required. The project itself is not touched - neither its path nor its saved state changes - and a portfolio is refused. No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | absolute target path of an .xml file | |
| overwrite | No | true = overwrite an existing file |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | path of the file that was written |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, idempotent=true, openWorld=true, and the description is consistent with them. It adds genuinely useful behavior beyond the annotations: exact output format/encoding, that the project path and saved state are untouched, that portfolios are refused, and that there is no undo step. It stops short of 5 only because it says nothing about permissions or failure modes.
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?
Front-loaded with the core action, then the format, then the constraints. Every sentence carries information, though the parenthetical format details make the opening sentence dense. Still tight and purposeful overall.
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 an output schema present the description need not explain return values, and the rich annotations carry the safety profile. Given that, the description covers format, overwrite condition, non-mutation of the project, portfolio refusal, and no-undo, leaving nothing an agent needs in order 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 coverage is 100%, so the schema already defines both parameters, making 3 the baseline. The description adds meaning beyond the schema by specifying that overwrite:true is required when the file already exists, which clarifies the consequence of omitting it.
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 (writes the open project into an .xml file) plus the exact target format (rillprj version 13, UTF-8, RIS upload form). It also explicitly distinguishes itself from the older File-menu 'save as XML', so an agent can tell it apart from the other save/ris_save siblings without opening their schemas.
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 real usage context: overwrite:true is required when the target exists, and a portfolio is refused. It also contrasts the tool with the alternative File-menu save, but it does not explicitly route against the many sibling save tools (project_file_save_as, project_ris_save_as, portfolio_project_files_save), so it stops short of full when-to-use/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_file_openOpen project fileADestructiveIdempotent
Opens exactly one project file (.rpj) and replaces the current project. A portfolio (.rpp) is refused; rillsoft_portfolio_file_open covers that. With unsaved changes pending, discardChanges:true is required. No undo step - the command history starts over. Whatever the loader has to say ends up in note.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | absolute path of an .rpj project file | |
| discardChanges | No | true = discard unsaved changes of the current project |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| note | No | hints about opening; missing when there were none |
| path | Yes | path of the file that was opened |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| skipped | No | parts that were not loaded; missing when nothing was skipped |
| projects | No | the projects it contains; only for a portfolio |
| portfolio | Yes | true = a portfolio was opened |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true, idempotentHint=true), it discloses what actually gets destroyed ('replaces the current project'), the irreversible consequence ('No undo step - the command history starts over'), and the required flag under pending unsaved changes. This is exactly the extra context annotations cannot carry.
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?
Four dense sentences, each load-bearing, with the destructive replacement front-loaded. The closing sentence about 'note' is the one arguable redundancy since an output schema exists, but it is short and orients the caller.
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 destructive open/replace operation the description covers side effects, the undo posture, the discarded-state requirement, and the sibling alternative; return values are covered by the output schema. Nothing needed to call it safely 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?
Schema coverage is 100% and both parameters are documented there, so the baseline is 3. The description adds conditional meaning the schema lacks: discardChanges:true is required only when unsaved changes are pending, not merely an optional toggle.
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 ('Opens exactly one project file (.rpj)') plus the scope limit on count and file type. It explicitly separates itself from the portfolio sibling by naming the file extension it refuses, so an agent can route correctly without opening either 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 when-not ('A portfolio (.rpp) is refused') and names the correct alternative, rillsoft_portfolio_file_open. It also states the precondition that selects discardChanges:true, covering the only non-obvious call path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_file_saveSave project fileADestructiveIdempotent
Saves the open project under the path it already has. Where it has never been saved, rillsoft_project_file_save_as is required. An open portfolio is refused; there rillsoft_portfolio_project_files_save writes the contained project files back. No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | path of the file that was written |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, open-world, idempotent and destructive, so the safety profile is largely covered. The description still adds behavior beyond them: the refusal case for an open portfolio and the fact that there is 'No undo step' (i.e., history_undo cannot revert this write). That is real value, though it does not describe what is overwritten or any permission requirements.
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 with zero filler. The core action is front-loaded, followed by the two routing rules and the undo caveat, in descending order of importance.
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?
An output schema exists, so return-value explanation is not needed. For a zero-parameter save operation with full annotation coverage, the description supplies everything an agent needs: the target, the failure/refusal paths, and the irreversibility.
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 disambiguate. The behavioral description of the implicit target (the currently open project path) is the only relevant 'parameter' and it is stated.
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 ('saves the open project') plus the exact scope ('under the path it already has'), and explicitly names the two sibling tools it is not (save_as, portfolio_project_files_save). An agent can distinguish it from every sibling without opening a 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 explicit when-to-use routing: when the project has never been saved, use rillsoft_project_file_save_as; when a portfolio is open, this tool is refused and rillsoft_portfolio_project_files_save is the correct call. Both alternatives and their selecting conditions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_file_save_asSave project file asADestructiveIdempotent
Saves the project under a new path (.rpj). Where that file exists already, overwrite:true is required. Refused while a portfolio is open; there rillsoft_portfolio_project_files_save saves the contained projects. No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | absolute target path of an .rpj file | |
| overwrite | No | true = overwrite an existing file |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | path of the file that was written |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds value beyond them: the overwrite precondition, the refusal when a portfolio is open, and the critical 'No undo step' warning. This is exactly the behavioral context an agent needs before a destructive 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?
Three short sentences, all front-loaded with zero filler; the destructive 'No undo step' warning sits last, which is acceptable emphasis rather than padding.
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?
Covers purpose, precondition, failure mode, alternative routing, and reversibility; an output schema exists, so return values need no explanation. Nothing an agent requires 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?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: 'under a new path' clarifies path semantics and the rule 'Where that file exists already, overwrite:true is required' explains the interaction between the two parameters beyond the per-field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ('Saves the project under a new path (.rpj)') that immediately distinguishes it from the sibling rillsoft_project_file_save and from the portfolio save tools. An agent can tell it apart without opening any 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 explicit when-not guidance ('Refused while a portfolio is open; there rillsoft_portfolio_project_files_save saves the contained projects') and names the condition selecting the alternative. Also states the precondition for the overwrite parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_renumberRenumber projectAIdempotent
Renumbers the project - the same function as the 'Renumber' menu: pull WBS codes into a gapless sequence, align task numbers with the WBS order, normalize the structure. Worth doing after rillsoft_project_sort or after many rillsoft_element_move calls. In a portfolio only the WBS codes are pulled, as the menu does there - task numbers are assigned per project and stay. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=true), so the bar is lower, and the description still adds value beyond them: 'One undo step' discloses reversibility, and the portfolio clause explains that task numbers are preserved per project while only WBS codes are pulled. It does not discuss cost on large projects, but the behavioral picture is solid.
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?
Front-loaded with the core action, then the menu equivalence, then the trigger conditions, then the portfolio edge case and undo cost. Every sentence carries information, though the menu-equivalence clause is slightly redundant with the opening verb.
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?
An output schema exists, so return values need no explanation. For a zero-parameter mutation the description supplies what matters: what changes, when to run it, portfolio-specific behavior, and undo cost. Nothing an agent needs 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?
Zero parameters, so the baseline is 4 and there is nothing for the description to clarify. The mention of portfolio vs. single-project behavior is contextual rather than parameter-related.
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 ('Renumbers the project') and immediately concretizes it: pull WBS codes into a gapless sequence, align task numbers with WBS order, normalize the structure. The 'same function as the Renumber menu' anchor makes the effect unambiguous even for an agent unfamiliar with the domain.
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 explicit trigger conditions tied to named siblings: 'Worth doing after rillsoft_project_sort or after many rillsoft_element_move calls.' That is real routing guidance, but there are no when-not conditions or warnings about cases where renumbering would be undesirable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_rescheduleReschedule projectAIdempotent
Reschedules the project: the same menu entries as 'Recalculate as early as possible' and 'as late as possible'. Fixed tasks and tasks already begun stay where they are - they are the anchors the rest is aligned to, and nothing moves before the status date. The direction is not stored state but this one-off recalculation; rillsoft_project_tree_get shows the new dates afterwards. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | early pulls every task to its earliest possible start (the default), late pushes them to their latest possible finish | early |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| direction | Yes | scheduling direction that was applied |
| statusDate | Yes | status date, DD.MM.YYYY hh:mm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that fixed and already-started tasks act as anchors and don't move, that nothing shifts before the status date, that the direction is a one-off recalculation rather than stored state, and that it consumes exactly one undo step. These mutation-behavior details (persistence, undo cost, anchoring rules) are exactly what annotations cannot convey.
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?
Four compact sentences, purpose front-loaded, no filler. The menu-entry reference is slightly indirect but earns its place by anchoring the behavior to a known UI action.
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?
An output schema exists, so return values need no explanation, and the description covers the essential behavioral contract (anchors, status date, non-persistent direction, single undo). Complete for calling the tool correctly, with only sibling routing left unaddressed.
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% and the enum values are already documented in the schema, so the description adds only the note that the direction is not persisted. That is a useful nuance but not enough to exceed the baseline when the schema does the heavy lifting.
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 ('Reschedules the project') and clarifies it maps to the 'Recalculate as early as possible'/'as late as possible' commands, so the operation is unambiguous. It does not explicitly differentiate itself from the nearby sibling rillsoft_project_status_date_reschedule, 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?
Usage is implied via the menu-entry analogy and the pointer that rillsoft_project_tree_get shows the new dates afterwards, which hints at the workflow. However, there is no explicit when-to-use/when-not or naming of the alternative reschedule tools (e.g. project_status_date_reschedule, task_progress_recalculate), leaving the agent to infer the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_ris_deleteDelete RIS projectADestructiveIdempotent
Deletes a project of the logged-in client on the Rillsoft Integration Server - the 'Delete project' button of the folder dialog. The server deactivates it with all its versions (soft delete; an administrator can restore it there). The project that is open right now, alone or inside the open portfolio, is refused (ris_project_is_open; call rillsoft_project_create first). rillsoft_project_ris_save_as is the counterpart that creates projects; a local file is not touched. Takes effect at once: no undo step. Runs with the login of the desktop session.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | id of the project on the server, from rillsoft_project_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | always true - a failure is an error, not a false |
| projectId | Yes | id of the project that was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: the delete is a soft delete (deactivation, restorable by an administrator), it takes effect immediately with no undo step, and it runs under the desktop session login. The destructiveHint/idempotentHint flags are already given, but these operational details are genuinely additive.
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?
Front-loads the core action and keeps every clause informative, but the refusal/alternative sentence and the 'local file is not touched' remark make it denser than strictly necessary. Still no filler or repetition.
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?
An output schema exists, so return values need no explanation, and the description covers reversibility, refusal conditions, timing, and session context. Nothing an agent needs to call this 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?
Only one parameter (projectId) and schema description coverage is 100%, so the schema already carries the meaning including the source list tool. The description adds no format or edge-case detail about the id, 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 and resource (deletes a RIS project of the logged-in client) and anchors it to a concrete UI affordance ('Delete project' button of the folder dialog). It also names the sibling it is not (rillsoft_project_ris_save_as) and the related create tool, so an agent can separate it from the many other *_delete siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when the call will be refused (project open alone or inside the open portfolio, error ris_project_is_open) and what to do instead, and contrasts it with the counterpart that creates projects. It also notes a local file is untouched, which heads off confusion with the project_file_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_ris_listList RIS projectsARead-onlyIdempotent
Lists the folders and projects of the logged-in client on the Rillsoft Integration Server (RIS) with projectId, versionId, uuid, name, code, path, lock and template flags - the projectId is what rillsoft_project_ris_open takes. Runs with the login of the desktop session and never asks for credentials; the answer names server, userName and clientId. Local project files are opened through rillsoft_project_file_open instead. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| permission | No | only projects the logged-in user holds this permission for: project_read (the default) lists everything readable, project_modify what may be saved back through rillsoft_project_ris_save, project_create what may be replaced | project_read |
Output Schema
| Name | Required | Description |
|---|---|---|
| server | Yes | URL of the Rillsoft Integration Server the desktop session is logged in to |
| folders | Yes | every folder of the client the user may see, root first |
| clientId | Yes | id of the logged-in client; -1 while none is selected |
| projects | Yes | every project the permission allows, at most 10000; more than that is an error |
| userName | Yes | user name of the desktop session |
| clientName | Yes | name of the logged-in client; empty when the server did not answer the lookup |
| permission | Yes | the permission the list was filtered by |
| openProjectId | No | projectId of the open document; only when it is a project of this server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, but the description adds real context beyond them: it runs under the desktop session login, never prompts for credentials, and the response carries server, userName and clientId. The 'no undo step' phrasing is largely redundant with readOnlyHint=true, keeping this just short of 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?
Purpose and return fields are front-loaded, and the routing hints are compact. One clause, 'Read-only, no undo step,' restates the readOnlyHint annotation and could be dropped, but overall the text is dense and earns most of its length.
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 an output schema present, the description need not explain return values, yet it helpfully names the key fields and their downstream use. Combined with full annotation coverage and a fully documented parameter, an agent has enough to call it correctly; only the ambiguity against the other RIS/folder list tools is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'permission' parameter already has a detailed enum description in the schema, so the baseline is 3. The description adds nothing about the parameter itself (the projectId mention refers to an output field, not an input), so it earns no lift above baseline.
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 ('Lists the folders and projects of the logged-in client on the Rillsoft Integration Server') and enumerates the returned identity fields (projectId, versionId, uuid, name, code, path, lock, template). It also disambiguates from nearby siblings: local project files go through rillsoft_project_file_open, and the returned projectId is the input for rillsoft_project_ris_open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the follow-up tool that consumes its output (rillsoft_project_ris_open) and the alternative for local files (rillsoft_project_file_open), which is exactly the routing an agent needs. It does not, however, address when to prefer it over the similar rillsoft_folder_ris_list or rillsoft_portfolio_ris_list siblings, so the disambiguation is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_ris_openOpen RIS projectADestructiveIdempotent
Opens a project of the logged-in client from the Rillsoft Integration Server by its projectId (see rillsoft_project_ris_list) and replaces the current project. Templates are refused (ris_template_unsupported); a local .rpj file is opened through rillsoft_project_file_open instead. With unsaved changes pending, discardChanges:true is required. Runs with the login of the desktop session and never asks for credentials. Saving goes back to the server through rillsoft_project_ris_save. No undo step - the command history starts over. Whatever the loader has to say ends up in note.
| Name | Required | Description | Default |
|---|---|---|---|
| lock | No | optimistic (the default) takes no lock and lets the server refuse a save whose version is stale (ris_conflict); pessimistic locks the project on the server for this user until another project is opened - where the lock is already held by someone else, the project opens read-only and note[] says so | optimistic |
| readOnly | No | true = open without any lock and refuse rillsoft_project_ris_save | |
| projectId | Yes | id of the project on the server, from rillsoft_project_ris_list | |
| discardChanges | No | true = discard unsaved changes of the current project |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| lock | Yes | lock mode of the open document |
| name | Yes | name |
| note | No | hints of the loader, such as a lock that was not granted; missing when there were none |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| clientId | Yes | id of the client the project belongs to |
| readOnly | Yes | true = the document is read-only; rillsoft_project_ris_save refuses it |
| projectId | Yes | id of the project on the server |
| versionId | Yes | id of the version the document holds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true, readOnly=false, idempotent=true and openWorld=true, yet the description adds real behavioral context beyond them: no credentials are requested (desktop session login), saving returns to server via rillsoft_project_ris_save, there is no undo because command history restarts, and loader output lands in note. That is meaningful disclosure of side effects and auth behavior.
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?
Front-loaded with purpose and projectId, then constraints in priority order. It is dense with semicolon-joined clauses and slightly long, but each sentence carries non-redundant information (template refusal, discardChanges gate, no undo, note[]) so nothing is padding.
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?
An output schema exists and the description defers return detail to it while still pointing at note[]. For a destructive, state-replacing open operation with 4 params, it covers auth, alternatives, prerequisites, conflict/lock behavior, and undo loss — nothing an agent needs to invoke it safely 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?
Schema coverage is 100% (including lock enum semantics and readOnly), so the baseline is 3; the description adds value by tying discardChanges:true to the concrete condition 'with unsaved changes pending' and by noting where the lock-read-only outcome is reported (note[]), not just the schema's field-level 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?
Specific verb+resource+scope: opens a RIS project of the logged-in client identified by projectId, and explicitly replaces the current project. It differentiates itself from siblings by naming rillsoft_project_ris_list (id source) and rillsoft_project_file_open (local .rpj), so an agent can select it without opening any 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?
Explicit when-to-use and when-not: templates are refused (ris_template_unsupported) and local .rpj files go through rillsoft_project_file_open instead. It also states the precondition that pending unsaved changes require discardChanges:true, which is exactly the routing decision an agent must make before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_ris_saveSave RIS projectADestructiveIdempotent
Writes the open project back to the Rillsoft Integration Server as a new version of the project it was opened from (rillsoft_project_ris_open). Creates one new version on the server per call; the document is then reloaded from the server; the UUIDs of every element stay valid, and the command history is kept, so the last steps can still be undone afterwards. Refused where the open document is not a project of the server (ris_project_not_open; use rillsoft_project_ris_save_as to store it there as a new project), where it is open read-only (ris_read_only), or where the server holds a newer version or a foreign lock (ris_conflict - reopen it). A local file is saved through rillsoft_project_file_save. An open portfolio is refused (a portfolio of the Integration Server is saved through rillsoft_portfolio_ris_save). Runs with the login of the desktop session and never asks for credentials. No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | version notes stored with the new version on the server; at most 2000 characters |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| lock | Yes | lock mode of the open document |
| name | Yes | name |
| note | No | hints of the loader, such as a lock that was not granted; missing when there were none |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| clientId | Yes | id of the client the project belongs to |
| readOnly | Yes | true = the document is read-only; rillsoft_project_ris_save refuses it |
| projectId | Yes | id of the project on the server |
| versionId | Yes | id of the version the document holds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/destructive/open-world profile, and the description adds substantial context beyond them: one new version per call, the document is reloaded, UUIDs stay valid, command history is retained so prior steps remain undoable, no undo step for the save itself, and it runs under the desktop session login without prompting for credentials. The only nuance is that 'one new version per call' sits awkwardly with idempotentHint=true, though this is a minor ambiguity rather than an inversion.
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 core action and its scope are front-loaded, and every subsequent clause (refusals, alternatives, auth, undo) earns its place. It is a dense single block rather than a tightly scoped statement, so slightly less economical than the ideal, but there is 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?
For a versioning save with several refusal paths, the description covers the action, the side effects, the auth model, the error conditions, and the correct alternative tools. An output schema exists, so return values need not be explained, and annotations cover the safety 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?
There is a single optional parameter (notes) and schema description coverage is 100%, including the 2000-character limit, so the schema already carries the meaning. The description adds nothing about the parameter; the baseline of 3 applies when the schema does the heavy lifting.
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: 'Writes the open project back to the Rillsoft Integration Server as a new version of the project it was opened from (rillsoft_project_ris_open).' It ties the operation to its counterpart open tool and distinguishes it from the sibling save variants (save_as, file_save, portfolio_ris_save).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use rillsoft_project_ris_save_as when the document is not a server project, rillsoft_project_file_save for local files, rillsoft_portfolio_ris_save for portfolios. It also enumerates the exact refusal conditions (ris_project_not_open, ris_read_only, ris_conflict) and what to do in each case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_ris_save_asSave RIS project asADestructiveIdempotent
Stores the open single project - new, a local file or a project of the server - as a new project in a folder of the logged-in client on the Rillsoft Integration Server. Creates one new project with version 1 per call, even when called twice. The document becomes that server project afterwards: rillsoft_project_ris_save writes further versions, a former file path no longer applies; the command history is kept. The new project is held in the optimistic lock mode; reopen it with rillsoft_project_ris_open lock:pessimistic to lock it. A portfolio is refused; a local copy is written through rillsoft_project_file_save_as. Runs with the login of the desktop session and never asks for credentials. No undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | version notes stored with the first version; at most 2000 characters | |
| folderId | Yes | id of the folder on the server the new project goes into, from rillsoft_project_ris_list | |
| template | No | true = store it as a template project (gets a new UUID); templates cannot be opened through MCP afterwards |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| lock | Yes | lock mode of the open document |
| name | Yes | name |
| note | No | hints of the loader, such as a lock that was not granted; missing when there were none |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| clientId | Yes | id of the client the project belongs to |
| folderId | Yes | id of the folder the project was stored in |
| readOnly | Yes | true = the document is read-only; rillsoft_project_ris_save refuses it |
| projectId | Yes | id of the project on the server |
| versionId | Yes | id of the version the document holds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, readOnly=false and openWorld=true, yet the description adds genuinely non-redundant behavior: no undo step, history/command history retained, credentials are never requested (session login), the new project is created under optimistic locking, and the former file path is invalidated. The only soft spot is 'one new project with version 1 per call, even when called twice,' which sits uneasily with idempotentHint=true, though it plausibly means versions are not incremented rather than that repeat calls are rejected.
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?
Front-loaded with the action and destination, then layers on routing, lock state and side effects. It is long (seven sentences) but nearly every sentence carries distinct operational value; only the 'called twice' clause is fuzzy enough to cost a point.
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 three-parameter mutation tool with full schema descriptions, an output schema and rich annotations, the description supplies everything else an agent needs: safety profile context (no undo), auth behavior, post-save lock mode, and the sibling to use for the rejected cases. Nothing required for correct invocation 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?
Schema description coverage is 100%: folderId, notes and template are each documented in the schema itself (including the note that templates cannot be reopened through MCP). The description adds no parameter-level semantics beyond the schema, 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 and resource ('Stores the open single project ... as a new project in a folder ... on the Rillsoft Integration Server') and distinguishes itself from near-identical siblings by name (rillsoft_project_ris_save for further versions, rillsoft_project_file_save_as for a local copy). An agent can pick this tool over rillsoft_project_ris_save or rillsoft_project_file_save_as without opening any 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?
Explicit routing rules are given: portfolios are refused here, local copies go through rillsoft_project_file_save_as, and the created project is afterward managed with rillsoft_project_ris_save. It also tells the agent how to take ownership afterward (reopen with rillsoft_project_ris_open lock:pessimistic), which is exactly the when/where guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_sortReorder elementsAIdempotent
Reorders the elements of the project - the same ordering function as the 'Order by ...' menu. What gets reassigned are the WBS codes; task numbers stay untouched (use rillsoft_project_renumber for those). It acts on the main project and on every subproject; in a portfolio on the portfolio and every project, as the menu does. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| criterion | Yes | ordering criterion; matches the 'Order by ...' menu |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| criterion | Yes | ordering criterion that was applied |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutation (readOnlyHint=false), idempotency, and non-destructiveness. The description adds genuinely new behavioral context: the exact side effect (WBS codes reassigned, task numbers untouched), the scope of application (main project, subprojects, portfolio), and undo granularity ('One undo step').
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?
Four tight sentences, front-loaded with the core purpose before routing, scope, and undo notes. Each sentence carries distinct information with no filler or repetition.
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?
An output schema exists, so return values need no explanation. Given the single-parameter, fully-covered schema and the annotation-provided safety profile, the description covers the remaining agent needs: side effects, scope, alternative tool, and undo 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 coverage is 100% and the enum is fully documented, so the baseline is 3. The description adds meaning by tying the criterion to the 'Order by ...' menu, clarifying the semantics of the enum values beyond the raw field 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 (reorders) and resource (project elements), then immediately disambiguates the mechanism: WBS codes are reassigned while task numbers stay untouched. It explicitly names the sibling rillsoft_project_renumber as the tool for the other case, so an agent can distinguish it without opening any 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 explicit routing to rillsoft_project_renumber for task numbering and clarifies that this mirrors the 'Order by ...' menu, including its scope across projects/subprojects/portfolios. It does not address the related siblings rillsoft_element_reorder or rillsoft_element_move, leaving one routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_status_date_rescheduleReschedule at status dateAIdempotent
Reschedules only the unfinished work: every task or part that is not complete at the status date moves behind it; finished work and dates before the status date stay. Does not recompute the whole schedule - that is rillsoft_project_reschedule; does not move the status date itself - that is rillsoft_project_status_date_set. Rolled back as a whole when a fixed milestone would have to move (conflict_rolled_back). One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| statusDate | Yes | status date of the project, DD.MM.YYYY hh:mm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds valuable behavioral detail beyond those annotations: only unfinished work moves, finished work and pre-status dates stay, conflicts with fixed milestones cause a full rollback, and the operation is a single undo step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core behavior, then efficiently names alternatives and rollback behavior. Every sentence adds necessary information, and there is no redundant restating of the title or schema.
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?
Complete for a zero-parameter, stateful project operation. An output schema exists, so return-value details are not needed, and the description covers scope, exclusions, conflict handling, and undo behavior sufficiently for an agent to invoke 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?
The tool has zero parameters and schema description coverage is 100%, so the schema carries no additional parameter semantics. Per the calibration rule, a zero-parameter tool with complete schema coverage has a baseline of 4.
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: reschedules unfinished work at the status date. It also explicitly distinguishes itself from rillsoft_project_reschedule and rillsoft_project_status_date_set, so an agent can identify its exact scope without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance by describing the limited scope of the operation and names the two alternative tools that should be used for whole-schedule rescheduling and status-date changes. No exclusions are left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_status_date_setSet status dateAIdempotent
Sets the status date of the project without recomputing anything. Moving unfinished work behind the new status date is a second, deliberate step through rillsoft_project_status_date_reschedule; recomputing the whole schedule goes through rillsoft_project_reschedule. Values before the project start are lifted to the project start. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| statusDate | Yes | status date, DD.MM.YYYY hh:mm; a value before the project start is lifted to the project start |
Output Schema
| Name | Required | Description |
|---|---|---|
| statusDate | Yes | status date of the project, DD.MM.YYYY hh:mm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=false, idempotentHint=true and destructiveHint=false already declared, the description still adds real value: 'without recomputing anything' scopes the side effect, and 'one undo step' discloses reversibility granularity. These go beyond what the annotations convey, though return-value shape is left to 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences, front-loaded with the core action and its scoping constraint, followed by sibling routing and the undo note. Every sentence 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?
For a single-parameter mutation with an output schema and full annotation coverage, the description supplies everything an agent needs: scope of side effects, sibling routing, edge-case handling (values before project start), and undo semantics.
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% and the only parameter is fully documented in the schema, including the pattern and the lift-to-start rule. The description restates the lift behavior rather than adding syntax or format detail 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?
States a specific verb and resource ('Sets the status date of the project') and immediately distinguishes itself from the two closely-named siblings rillsoft_project_status_date_reschedule and rillsoft_project_reschedule. An agent can tell exactly which of the three it needs without opening any 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?
Explicitly names the alternatives and the conditions that select them: moving unfinished work is a separate deliberate step via rillsoft_project_status_date_reschedule, and full recomputation goes via rillsoft_project_reschedule. This is the when/when-not/alternatives pattern at its clearest.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_team_preference_removeRemove preferred teamADestructiveIdempotent
Takes the preferred team of a project or subproject back out. The counterpart of rillsoft_project_team_preference_set. An inherited preferred team is removed at the pack that carries it; under preferredTeams[] rillsoft_project_tree_get shows only the entries a pack carries itself. Where the project or subproject does not carry that team, the call fails rather than reporting a silent success. In a portfolio projectUuid names a project or a subproject inside it, as in a single project; an empty projectUuid - the portfolio itself - is refused. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | id of the team | |
| projectUuid | No | UUID of the project or subproject; empty = the main project |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| preferredTeams | Yes | the preferred teams of the project or subproject after the change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses inheritance semantics, the pack-level removal rule, the failure-not-silent-success behavior, the portfolio restriction on empty projectUuid, and that a single undo step is consumed. This is exactly the behavioral detail an agent needs before calling a destructive 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?
Front-loaded with the core action, and every sentence carries operational information. The multi-clause sentences are dense but not padded; nothing is wasted, though it reads as more than strictly necessary.
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 destructive mutation with an output schema available, the description covers relation to siblings, failure modes, scope rules, and undo cost. Nothing an agent needs to invoke 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?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning to projectUuid: in portfolio mode it names a project or a subproject inside it, and an empty value (the portfolio itself) is refused — a constraint the schema's 'empty = the main project' wording does not 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?
Opens with a specific verb+resource ('Takes the preferred team ... back out') and immediately identifies its counterpart, rillsoft_project_team_preference_set, letting an agent distinguish removal from setting without opening either 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?
It names the counterpart operation and describes concrete conditions — inherited teams are removed at the pack that carries them, and the call fails rather than silently succeeding when the target does not carry the team. It stops short of an explicit 'use set instead when...' routing statement, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_team_preference_setSet preferred teamAIdempotent
Marks a team as the preferred team of a project or subproject. This is not an assignment but a preference, carrying neither utilization nor productivity: it is inherited by every subproject below, it presets the team filter in rillsoft_task_resource_candidate_list and in the dialogs, and it narrows the supply in the capacity view split by project. projectUuid addresses the main project (empty) or any subproject. Read it back through rillsoft_project_tree_get (preferredTeams[]). Team assignments on individual tasks do not exist in this contract; people are assigned through rillsoft_task_employee_assignment_set. In a portfolio projectUuid names a project or a subproject inside it, as in a single project; the portfolio itself carries no preferred team (the user interface offers none there), so an empty projectUuid is refused. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | id of the team from rillsoft_resource_pool_catalog_list with types:["team"] | |
| projectUuid | No | UUID of the project or subproject that carries the preference; empty = the main project |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| preferredTeams | Yes | the preferred teams of the project or subproject after the change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only carry idempotent/non-destructive flags; the description adds substantial behavioral context beyond them: inheritance to every subproject, presetting of the team filter, narrowing of capacity-view supply, the empty-projectUuid refusal, and 'One undo step.' This is exactly the extra behavioral layer annotations cannot express.
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?
Front-loaded with the core action, then progressively adds inheritance, effects, read-back, and edge cases. Dense but nearly every sentence earns its place; a small amount of compaction is possible, keeping it just shy of 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?
With an output schema present, return values need not be explained. The description covers inheritance, side effects, portfolio behavior, the read-back path, and the undo behavior — everything an agent needs to call this mutation 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 coverage is 100%, so the baseline is 3. The description adds real meaning the schema lacks: projectUuid as empty=main project is echoed, but the portfolio semantics (projectUuid naming a project/subproject inside a portfolio, and the portfolio itself carrying no preference) are not derivable from the schema and genuinely enrich the 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?
States a specific verb+resource ('marks a team as the preferred team of a project or subproject') and immediately distinguishes it from what it is not ('not an assignment'). It names related siblings (rillsoft_task_employee_assignment_set, rillsoft_task_resource_candidate_list) so an agent can place it in the tool graph without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it versus task-level assignment ('Team assignments on individual tasks do not exist in this contract'), names the read-back tool (rillsoft_project_tree_get), and covers the portfolio edge case where an empty projectUuid is refused. Clear when/when-not guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_tree_getRead projectARead-onlyIdempotent
Use this to read tasks and dependencies: it returns the whole project as a tree - key data including the status date, subprojects, tasks (UUID, WBS, computed dates, milestone and critical flags, progress and effort) and every dependency. There is no separate task list tool; this is the read path for them. Read-only, no undo step. Each task carries four assignment arrays: assignments[] (roles), employeeAssignments[], machineRoleAssignments[] and machineAssignments[] - empty where the task holds nothing of that resource type. Where several tasks use one machine or machine role together, it appears in none of those arrays but in sharedAssignments[] (type, id, name, quantity, utilization, sharedTaskUuids[] holding the UUIDs of the other tasks involved); that field is absent where the task shares nothing. A task with sameRow:true is drawn on one display row together with its WBS predecessor. With includePositionRange:true the position range per task is reported as well. Beware: the critical field is not a float indicator.
| Name | Required | Description | Default |
|---|---|---|---|
| includePositionRange | No | true = report the position range per task as well: earliestStart and latestFinish (DD.MM.YYYY hh:mm) plus startReserveHours and finishReserveHours. Computed against the nearest fixed frame (subproject or project) and never before the status date. Beware: moving a task inside that range CAN drag its successors along - this is the total float of network analysis, not the free float. Subprojects and the main project do not carry these fields; what they show is the envelope of their children, not a range of their own. Requires the Builder.bReserve setting, otherwise the call fails. Defaults to false |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| code | No | code of the element; missing when empty |
| name | Yes | name |
| type | Yes | kind of the element |
| uuid | Yes | UUID of the element |
| color | No | bar color as #RRGGBB or 'automatic' |
| fixed | Yes | date is fixed |
| notes | No | notes; missing when empty |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| sameRow | No | true = shares one display row with the WBS predecessor; missing otherwise |
| critical | No | true = on the critical path; not a float indicator |
| elements | Yes | child elements in WBS order |
| priority | No | priority in percent; not reported in a portfolio |
| statusId | No | id of the project status; not reported in a portfolio |
| fixedType | No | task type of the resource block; missing while it is undetermined |
| milestone | No | true = milestone |
| portfolio | Yes | true = the open document is a portfolio |
| calendarId | No | own calendar; 0 = inherited from the parent element |
| categoryId | No | id of the project category; not reported in a portfolio |
| customerId | No | id of the customer; not reported in a portfolio |
| planNumber | No | number of the plan variant; not reported in a portfolio |
| statusDate | Yes | status date, DD.MM.YYYY hh:mm |
| assignments | No | role assignments |
| effortHours | No | effort in hours |
| dependencies | Yes | all dependencies of the project |
| latestFinish | No | latest possible finish; only with includePositionRange:true |
| primaryColor | No | color is inherited by child elements |
| durationHours | No | duration in hours |
| earliestStart | No | earliest possible start; only with includePositionRange:true |
| effortEditable | No | effort may be entered on the task |
| preferredTeams | No | preferred teams; missing when none is set |
| schedulingMode | No | scheduling mode; not reported in a portfolio |
| effortDoneHours | No | completed effort in hours |
| progressPercent | No | actual progress in percent |
| teamAssignments | No | team assignments; missing when the task carries no team |
| timeStepMinutes | No | input time grid in minutes |
| durationStepUnit | No | unit used to enter a duration |
| quantityStepUnit | No | unit used to enter a quantity |
| sharedAssignments | No | machine roles and machines shared with other tasks; missing when the task shares nothing |
| startReserveHours | No | start reserve in hours; only with includePositionRange:true |
| finishReserveHours | No | finish reserve in hours; only with includePositionRange:true |
| machineAssignments | No | machine assignments |
| employeeAssignments | No | assignments of specific people |
| materialAssignments | No | material assignments |
| dynamicRedistribution | No | redistribute effort dynamically; not reported in a portfolio |
| machineRoleAssignments | No | machine role assignments |
| outputQuantityEditable | No | output quantity may be entered on the task |
| dynamicRedistributionEffective | No | the switch as the scheduling applies it: true where the project or the task carries it, scheduling is capacity_driven and the task carries named people. A task that only inherits from the project has dynamicRedistribution false and this one true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, but the description adds substantial behavioral context beyond them: 'no undo step,' the exact composition of the returned tree, the meaning of the four assignment arrays and the separate sharedAssignments[] case, the absent-field semantics, the sameRow display rule, the Builder.bReserve prerequisite that makes the call fail, and the warning that the 'critical' field is not a float indicator.
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 purpose and scope are front-loaded in the first sentence, and most sentences carry concrete information about the payload rather than filler. It is dense and long, with some overlap between the body text and the includePositionRange schema description, but nothing is gratuitous.
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 complex tree-read tool with one optional parameter, the description covers scope, payload structure, edge cases (sharedAssignments, empty arrays, absent fields), a failure prerequisite, and a semantic warning. An output schema exists, so return-value mechanics need not be restated, and the description still supplies enough framing to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents includePositionRange thoroughly. The description goes slightly beyond it by interpreting the result (total float of network analysis vs. free float, and that moving inside the range can drag successors along), which adds decision-relevant nuance even though much of the text overlaps the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('read tasks and dependencies'), states the return shape ('the whole project as a tree'), and enumerates the payload (status date, subprojects, tasks with UUID/WBS/dates/flags/progress/effort, and every dependency). It also explicitly distinguishes itself from siblings by asserting 'There is no separate task list tool; this is the read path for them.'
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 clearly frames the tool as the read path for tasks and dependencies and rules out a competing task-list tool, which is strong routing guidance. However, it does not contrast against other read-oriented siblings such as analysis_report_get, resource_usage_list, or property_panel_get, nor state when a lighter read would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_project_updateSet project propertiesAIdempotent
Sets properties of the main project: key data (name, start, finish, fixing), calendar and color, the master-data references category, status, customer, priority and plan variant, plus scheduling mode, input step widths and the two metric switches. This changes the period of the project, not the time scale of the display (use rillsoft_timescale_apply for that). Subprojects go through rillsoft_subproject_update. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | name of the project | |
| color | No | bar color as #RRGGBB or 'automatic' | |
| fixed | No | fix the project start | |
| start | No | project start, formatted DD.MM.YYYY hh:mm | |
| finish | No | project finish, formatted DD.MM.YYYY hh:mm | |
| priority | No | priority of the project in percent (0 to 100), as in the dialog. In a portfolio refused: the tool addresses the portfolio, the field belongs to each project | |
| statusId | No | id of the project status from rillsoft_resource_pool_catalog_list (types: project_status); 0 = none. In a portfolio refused: the tool addresses the portfolio, the field belongs to each project | |
| calendarId | No | id of the calendar from rillsoft_resource_pool_catalog_list (types: calendar); the main project always carries a concrete id | |
| categoryId | No | id of the project category from rillsoft_resource_pool_catalog_list (types: project_category); 0 = none. In a portfolio refused: the tool addresses the portfolio, the field belongs to each project | |
| customerId | No | id of the customer from rillsoft_resource_pool_catalog_list (types: project_customer); 0 = none. In a portfolio refused: the tool addresses the portfolio, the field belongs to each project | |
| primaryColor | No | pass the color on to child elements that carry none of their own | |
| effortEditable | No | effort may be entered on the task | |
| schedulingMode | No | capacity_driven computes with the calendars and absences of the assigned resources, deadline_driven computes without them. In a portfolio refused: the tool addresses the portfolio, the mode belongs to each project | |
| validationMode | No | what to do where existing elements would fall outside the new period: strict (the default) refuses and names the culprits, extend widens the period to cover what exists, force applies it anyway; effective only together with start or finish | strict |
| planningVariant | No | number of the plan variant (baseline) of the project; 0 = dynamic. Refused in a portfolio: there is no baseline there, not even per project | |
| timeStepMinutes | No | input time grid in minutes: 1, 5, 10, 15, 30 or 60, at most the grid of the calendar | |
| durationStepUnit | No | unit used to enter a duration | |
| quantityStepUnit | No | unit used to enter a quantity | |
| dynamicRedistribution | No | redistribute effort dynamically; permitted only with schedulingMode capacity_driven. In a portfolio refused: the tool addresses the portfolio, the switch belongs to each project | |
| outputQuantityEditable | No | output quantity may be entered on the task |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-readOnly, idempotent, non-destructive, closed-world mutation, so the safety bar is partly covered. The description adds genuinely new behavioral context beyond the schema by disclosing "One undo step" and clarifying that the period, not the display time scale, is affected.
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 property inventory is front-loaded in the first sentence, followed by two short routing/behavioral sentences. Slightly long enumeration, but each clause maps to real schema content and nothing is wasted.
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 an anyOf-required schema of 20 optional fields, full schema descriptions, an output schema, and annotations supplying the safety profile, the description supplies what an agent needs: purpose, routing to siblings, and undo semantics. Minor gaps remain around partial-update semantics and the anyOf requirement, but the coverage is strong.
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 one of the 20 optional parameters is already documented in the schema, including enum meanings, portfolio refusals and defaults. The description's list of property categories largely restates that structure and adds no format or constraint detail beyond it — the correct baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Sets properties of the main project") and enumerates the property groups it touches (key data, calendar/color, master-data references, status, customer, priority, plan variant, scheduling mode, step widths, metric switches). It explicitly distinguishes itself from rillsoft_subproject_update and rillsoft_timescale_apply, so an agent can separate it from its nearest siblings without inspecting schemas.
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 names alternatives with conditions: time-scale display changes go to rillsoft_timescale_apply, subprojects go to rillsoft_subproject_update. That is clear routing, though it does not state when to prefer this over rillsoft_project_create or the property panel sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_property_panel_closeClose property sheetARead-onlyIdempotent
Switches the property sheet back to the info sheet. Where the info sheet is open already it does nothing, and that is not an error. No undo step, no change to the project. It answers like rillsoft_property_panel_get.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | name of the shown element; missing when there is none |
| type | Yes | kind of the open property sheet; 'other' for an unknown one |
| uuid | No | UUID of the shown element; missing when there is none |
| number | No | number of the shown element; missing when there is none |
| activeTab | No | the tab in front; missing when no property sheet is open |
| availableTabs | Yes | names of all tabs of the open property sheet |
| infoPanelVisible | Yes | true = the docking bar is visible |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond annotations: idempotent no-op is not an error, no undo step, no project change, and echoes rillsoft_property_panel_get response. This fills gaps annotations don't cover (undo behavior, error semantics).
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 concise sentences, front-loaded with the main action, then behavioral caveats. No waste.
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?
Output schema exists and annotations cover safety/idempotency; description adds undo and no-op semantics and return-shape pointer. Complete enough for a parameterless toggle.
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?
Zero parameters, so baseline 4 applies. No param info 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?
Specific verb ('Switches') and resource ('property sheet back to the info sheet'). Clear what it does, though it doesn't explicitly differentiate from sibling rillsoft_property_panel_open or rillsoft_resource_pool_edit_close, but the name/description pairing is sufficiently distinct.
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?
Implies when to use (to return from property sheet to info sheet) and states the no-op case 'where the info sheet is open already it does nothing'. No explicit alternatives or when-not-to-use guidance vs sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_property_panel_getRead property sheetARead-onlyIdempotent
Reads the property sheet in the info window: type (info, task, project, subproject, portfolio, combination, other), uuid, number and name of the element shown, activeTab, availableTabs[] and infoPanelVisible. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | name of the shown element; missing when there is none |
| type | Yes | kind of the open property sheet; 'other' for an unknown one |
| uuid | No | UUID of the shown element; missing when there is none |
| number | No | number of the shown element; missing when there is none |
| activeTab | No | the tab in front; missing when no property sheet is open |
| availableTabs | Yes | names of all tabs of the open property sheet |
| infoPanelVisible | Yes | true = the docking bar is visible |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds a useful extra: 'no undo step,' which clarifies that this read does not create a history entry. It also lists the return fields, providing behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, followed by a precise field list. 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?
An output schema exists, so return values are technically covered by it. The description nonetheless enumerates the key fields, which is helpful. The only minor gap is absence of any prerequisite context (e.g., panel open state), but this is not required for calling the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description appropriately focuses on output fields rather than input parameters, which is consistent 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 (Reads) and resource (property sheet in the info window), and enumerates the exact fields returned. This clearly distinguishes it from sibling tools like rillsoft_property_panel_open and rillsoft_property_panel_close.
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 explicit when-to-use or when-not-to-use guidance is given. The read-only nature and the presence of open/close siblings imply a basic context, but prerequisites (e.g., panel must be open) and alternatives are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_property_panel_openOpen property sheetARead-onlyIdempotent
Shows a task, a subproject or the project in the property sheet of the info window, optionally on a named tab. A hidden info window is shown for that (for the running session only). The element gets selected and scrolled into view along the way - the selection is part of the picture. Purely navigational: values are set through rillsoft_task_update, rillsoft_subproject_update and the other writing tools. No undo step, no change to the project. It answers like rillsoft_property_panel_get.
| Name | Required | Description | Default |
|---|---|---|---|
| tab | No | the tab that shall come to the front; rillsoft_property_panel_get reports the names in availableTabs[] | |
| uuid | No | UUID of the task, subproject or project; empty = the main project | |
| number | No | number of the part where the UUID is ambiguous (a task that was split) |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | name of the shown element; missing when there is none |
| type | Yes | kind of the open property sheet; 'other' for an unknown one |
| uuid | No | UUID of the shown element; missing when there is none |
| number | No | number of the shown element; missing when there is none |
| activeTab | No | the tab in front; missing when no property sheet is open |
| availableTabs | Yes | names of all tabs of the open property sheet |
| infoPanelVisible | Yes | true = the docking bar is visible |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing UI side effects: a hidden info window is shown for the running session only, the element is selected and scrolled into view, and the selection change is part of the result. It also states there is no undo step and no change to the project, which is exactly the extra context annotations cannot carry.
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?
Purpose is front-loaded in the first sentence and every sentence carries information, but the phrasing is a little chatty ('the selection is part of the picture') and the trailing sentence about rillsoft_property_panel_get is a structural afterthought.
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 an output schema present and covered by the 'answers like rillsoft_property_panel_get' note, return values need no explanation; purpose, session scope, side effects and the write-tool boundary are all covered. It omits failure behavior for an unknown uuid or tab name, which an agent would need before calling blind.
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 tab, uuid and number in detail. The description only restates the optional named tab and implies uuid defaults to the main project; baseline 3 applies when the schema does the heavy lifting.
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 ('Shows a task, a subproject or the project in the property sheet of the info window') and scopes it against the writing siblings by declaring itself 'purely navigational'. An agent can distinguish it from rillsoft_property_panel_get and rillsoft_property_panel_close without opening a 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?
Explicitly routes value changes to rillsoft_task_update / rillsoft_subproject_update and the other writing tools, and cross-references rillsoft_property_panel_get for tab names and response shape. It gives clear context but never states when to prefer this over rillsoft_property_panel_get or rillsoft_row_selection_apply as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_absence_listList absencesBRead-onlyIdempotent
Reads the absences of a person or a team: holiday, sickness and other time away. The pool is never changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | id; with employee either the id of the person or that of one of their qualification rows. Give exactly one of 'id' and 'code' | |
| to | No | only absences up to this day (DD.MM.YYYY) | |
| code | No | code; a code belonging to several people makes the call fail | |
| from | No | only absences from this day on (DD.MM.YYYY) | |
| type | No | resource type; employee by default | employee |
| absenceType | No | only absences carrying this one-letter type code, as stored in the resource pool. The codes are German initials, not English ones: 'U' for Urlaub (vacation) and 'K' for Krankheit (sick leave) are the common pair, and a pool may define further letters. Leave it out for every type. An unknown letter is not an error - it simply matches nothing, so check rillsoft_resource_absence_list without the filter first | |
| includeTeams | No | true = report the absences of the teams the person works in as well |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | id of the person or team |
| name | Yes | name of the person or team |
| type | Yes | resource type |
| teams | No | absences of the teams of the person; only with includeTeams:true |
| absences | Yes | own absences within the queried period |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and 'The pool is never changed' largely restates that safety profile rather than extending it. It adds no auth requirements, rate limits, or scoping caveats beyond what the annotations cover, so it is adequate but not additive.
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, purpose front-loaded, no filler. Every clause carries information about scope or effect.
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?
An output schema exists, so return values need not be explained, and the annotations plus 100%-covered schema carry the parameter and safety detail. The description is complete for correct invocation, with only routing against the sync sibling left implicit.
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 seven parameters in detail, including the id/code mutual exclusion and the German one-letter absence codes. The description adds only the loose mapping of 'person or a team' to the resource type, 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 and resource ('Reads the absences of a person or a team') and enumerates the content (holiday, sickness, other time away), so an agent understands exactly what is returned. It does not explicitly name or distinguish itself from the nearby sibling rillsoft_resource_absence_sync, 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?
No when-to-use statement, no prerequisites, and no alternative named. The only routing hint ('check ... without the filter first') lives in the absenceType schema description rather than the tool description, so the description itself offers essentially no usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_absence_syncReconcile absencesADestructiveIdempotent
Mirrors the absences of many people and teams in one call - the daily run of a foreign system. Every entry is resolved and checked first and written only afterwards; one faulty entry leaves the whole run without effect. Inside an open unit of work only.
| Name | Required | Description | Default |
|---|---|---|---|
| entries | Yes | per entry { type, id or code, timeWindow (optional), periods } | |
| timeWindow | No | a shared { from, to } for the whole call; an entry may bring a window of its own |
Output Schema
| Name | Required | Description |
|---|---|---|
| entries | Yes | balance per reconciled entry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive/idempotent/not-read-only), the description discloses non-obvious transactional behavior: entries are validated and resolved before any write, the run is all-or-nothing ('one faulty entry leaves the whole run without effect'), and it must execute inside an open unit of work. These are exactly the traits an agent needs to call it safely and are not derivable from the structured fields.
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 tight sentences, front-loaded with the purpose, then atomicity, then the transaction precondition. No wasted words, though the dashes make it slightly dense.
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 destructive, nested-schema tool with an output schema (so return values need not be explained), the description covers purpose, atomicity, and the transaction requirement. It could be more explicit that mirroring replaces/clears existing absences in the window, but the schema's 'an empty array clears the window' partly covers that.
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 nested entry/timeWindow/periods semantics are already fully documented by the schema, and the description adds no field-level meaning beyond 'many people and teams' and 'every entry'. Baseline 3 is appropriate when the schema carries the parameter burden.
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 ('mirrors'/reconcile) and resource (absences of many people and teams), plus the batch framing ('in one call - the daily run of a foreign system'). An agent can distinguish it from the singular rillsoft_resource_absence_list by the bulk/mirror semantics, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when this applies ('the daily run of a foreign system') and a hard precondition ('Inside an open unit of work only'). It does not, however, name an alternative or state an explicit when-not, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_catalog_listList master data catalogsARead-onlyIdempotent
Reads the catalogs of the existing master data: role, team, employee, material, machine_role, machine, project_category, project_status, project_customer and calendar - each entry with id and name, people additionally with teamIds, roleIds and personId. The ids fit rillsoft_task_employee_assignment_set, rillsoft_resource_pool_resource_get and the analysis report. The master data is never changed.
| Name | Required | Description | Default |
|---|---|---|---|
| types | No | the catalogs wanted; empty means all of them | |
| activeOnly | No | true (the default) = only people whose employment period intersects the project period | |
| searchText | No | filter by name (substring, case does not matter) |
Output Schema
| Name | Required | Description |
|---|---|---|
| roles | No | entries of the catalog |
| teams | No | entries of the catalog |
| machines | No | entries of the catalog |
| material | No | entries of the catalog |
| calendars | No | calendars of the pool |
| employees | No | entries of the catalog |
| machineRoles | No | entries of the catalog |
| projectStatuses | No | entries of the catalog |
| projectCustomers | No | entries of the catalog |
| projectCategories | No | entries of the catalog |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description's 'master data is never changed' is confirmatory. It adds genuine context beyond annotations: the returned fields (id/name, plus teamIds/roleIds/personId for people) and the cross-tool id interoperability.
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 dense sentences; the catalog list is front-loaded and every clause carries information. It is text-heavy but not padded, with only minor redundancy in the 'never changed' clause and the duplicated type enumeration.
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?
An output schema exists, so return-value explanation is not strictly required, yet the description still conveys the useful shape of results and how the ids feed other tools. Combined with the 100% schema coverage and clear annotations, an agent has enough to invoke correctly; only explicit usage routing 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?
Schema description coverage is 100%, so the schema already documents types, activeOnly and searchText, and the description largely restates the enum set rather than adding syntax or edge-case meaning. The only extra signal is the implicit 'empty means all' behavior, which is already in the schema. 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+resource ('Reads the catalogs of the existing master data') and enumerates the exact catalog types covered. An agent can distinguish this from siblings like rillsoft_resource_pool_resource_get or rillsoft_resource_pool_ris_list without opening any 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?
It implies downstream usage by naming the tools whose ids match (rillsoft_task_employee_assignment_set, rillsoft_resource_pool_resource_get, analysis report), but it gives no explicit when-to-use vs when-not guidance relative to the many sibling list/get tools. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_edit_closeClose unit of workADestructiveIdempotent
Closes the unit of work and releases the lock. Without save:true the working copy is discarded, and the stored pool stays as it was.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | true = save before closing; false, the default, discards unsaved changes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | path of the pool file; only with source file |
| roles | Yes | number of qualifications |
| teams | Yes | number of teams |
| client | No | tenant; only with source ris |
| source | Yes | origin of the resource pool |
| workUnit | Yes | state of the unit of work on the pool |
| calendars | Yes | number of calendars |
| employees | Yes | number of people |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, readOnlyHint=false and idempotentHint=true, so the description only needs to add context — and it does, explaining the lock release and that the default path discards the working copy while the stored pool is untouched. That is the key data-loss semantics an agent needs before calling with the default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the irreversible default behavior is stated immediately after the core action. Every clause carries information the agent needs.
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?
Output schema exists, so return values need no explanation, and the mutation/lock/discard behavior is covered. A minor gap remains around preconditions (must an edit session be open, what happens if none is) given openWorldHint=true.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the single boolean, so the baseline is 3. The description goes beyond the schema by spelling out the consequence of omitting save (working copy discarded, stored pool unchanged), which is the semantics that actually drives the parameter choice.
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?
Specific verb ('Closes') plus resource ('the unit of work') with an explicit side-effect (releases the lock), which distinguishes it from the save sibling in the same edit session. It does not name the sibling tools (edit_open / edit_save) as alternatives, so alignment still requires a little 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?
Usage is implied by the open/save/close family and by the save:true note, but the description never states when to close versus when to save first, nor that uncommitted edits are lost unless save:true. An agent must infer the workflow from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_edit_openOpen unit of workAIdempotent
Opens a unit of work on the resource pool: it locks the pool and creates a working copy. Every writing pool tool is valid inside an open unit of work only, and none of them ever saves on its own. While a unit is open, rillsoft_resource_pool_file_select is blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| discardChanges | No | true = discard a unit of work that is already open, together with its unsaved changes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | path of the pool file; only with source file |
| roles | Yes | number of qualifications |
| teams | Yes | number of teams |
| client | No | tenant; only with source ris |
| source | Yes | origin of the resource pool |
| workUnit | Yes | state of the unit of work on the pool |
| calendars | Yes | number of calendars |
| employees | Yes | number of people |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) by disclosing the locking side effect, the creation of a working copy, and the crucial transactional rule that no pool write tool auto-saves. It also warns which sibling is blocked while the unit is open, which the annotations cannot express.
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 clauses, each earning its place: the action and side effects first, then the transactional rule, then the blocked tool. Front-loaded and free of 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?
An output schema exists so return values need not be explained, and the description covers preconditions, side effects, and the blocked sibling. The minor gap is that it does not name rillsoft_resource_pool_edit_save / rillsoft_resource_pool_edit_close, leaving the agent to infer how the unit is persisted and released.
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% for the single discardChanges parameter, so the schema already carries its meaning ('true = discard a unit of work that is already open, together with its unsaved changes'). The description adds nothing about 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 and resource ('opens a unit of work on the resource pool') and immediately explains the concrete effect: it locks the pool and creates a working copy. This distinguishes it cleanly from siblings like rillsoft_resource_pool_edit_close, rillsoft_resource_pool_edit_save, and rillsoft_resource_pool_file_select without the agent needing to open any 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 a strong precondition: every writing pool tool is valid only inside an open unit of work, and none of them saves on its own. It also names a blocked alternative (rillsoft_resource_pool_file_select). What it does not state explicitly is the pairing with rillsoft_resource_pool_edit_save / edit_close, so the agent must infer the save-then-close sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_edit_saveSave unit of workADestructiveIdempotent
Checks the working copy against the open projects and writes it back once. The unit of work stays open. Against the Rillsoft Integration Server this creates exactly one new pool version, no matter how many changes the unit holds.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | true = save despite conflicts with the open projects (the 'Yes' of the reference editor) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | hint on conflicts with foreign changes; only when some occurred |
| path | No | path of the pool file; only with source file |
| roles | Yes | number of qualifications |
| teams | Yes | number of teams |
| client | No | tenant; only with source ris |
| source | Yes | origin of the resource pool |
| workUnit | Yes | state of the unit of work on the pool |
| calendars | Yes | number of calendars |
| employees | Yes | number of people |
| versionId | No | id of the created pool version; only with source ris |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, idempotent=true and openWorld. The description goes beyond them by disclosing the conflict check against open projects, the collapsing of many changes into a single saved version, and that the working session remains open afterwards — real behavioral context an agent cannot get from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and with no filler. The mid-sentence emphasis formatting is slightly unusual but the content is dense and each sentence carries a distinct fact (action, lifecycle, version semantics).
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?
An output schema exists and the annotations cover the safety profile, so the description need not explain returns. It adequately covers the save semantics, conflict behavior and session lifecycle; only the relationship to sibling save/close/ris-save tools is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema already explains confirm as 'save despite conflicts'. The description's mention of checking the working copy against open projects gives the conflict notion some context, but adds little beyond what the schema states; 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?
States a specific verb (checks/writes back a working copy) and resource (the unit of work / resource pool), and adds precise scope details like writing back only once and producing one pool version. It is distinguishable from generic save siblings, though it never names or contrasts them.
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 only implied: 'The unit of work stays open' hints that a different tool (e.g. resource_pool_edit_close) is needed to finish the session, but the description never says when to prefer this save over close, open, or the ris/project save variants. No explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_file_selectSelect resource poolAIdempotent
Switches the global resource pool to a pool file (.xml). Possible only on a new, unmodified project, so call rillsoft_project_create first. No undo step; the setting holds application-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | absolute path of a resource pool file (.xml, rillprj_reference) |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | path of the pool file; only with source file |
| roles | Yes | number of qualifications |
| teams | Yes | number of teams |
| client | No | tenant; only with source ris |
| source | Yes | origin of the resource pool |
| workUnit | Yes | state of the unit of work on the pool |
| calendars | Yes | number of calendars |
| employees | Yes | number of people |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits beyond annotations: no undo step, setting holds application-wide, and the precondition of a new unmodified project. The annotations declare idempotentHint=true and destructiveHint=false, and the description's 'no undo step' adds nuance. Missing what happens on failure or whether the current pool is preserved.
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, zero waste, front-loaded with the core action and constraints. 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?
Given a single-parameter tool with full schema coverage, annotations, and an output schema, the description covers the critical precondition and side effects. It could mention what the output schema returns (e.g., success status) but that's optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the path parameter is fully documented in the schema with absolute path and .xml format. The description adds no further parameter meaning beyond referencing the file type, 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?
States a specific verb ('switches') and resource ('global resource pool') with the file format restriction (.xml). An agent can distinguish this from sibling tools like resource_pool_edit_open or resource_pool_ris_select without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the precondition: only works on a new unmodified project, so call rillsoft_project_create first. This gives clear when-to-use context, though it doesn't name alternatives for switching pools in other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_getRead resource poolARead-onlyIdempotent
Shows the current resource pool source (a file or the Rillsoft Integration Server), how much it holds (roles, teams, people, calendars) and whether a unit of work is open. The pool is never changed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | path of the pool file; only with source file |
| roles | Yes | number of qualifications |
| teams | Yes | number of teams |
| client | No | tenant; only with source ris |
| source | Yes | origin of the resource pool |
| workUnit | Yes | state of the unit of work on the pool |
| calendars | Yes | number of calendars |
| employees | Yes | number of people |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds 'The pool is never changed,' which is redundant with readOnlyHint, and contextual detail about source types and contents, but no new behavioral traits such as auth needs or snapshot semantics. With annotations carrying the main burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently enumerates what is shown and ends with the key behavioral guarantee. No filler or redundant sentences.
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 no-parameter, read-only tool with an output schema and rich annotations, the description is complete enough: it explains what is returned and that the pool is unchanged. Nothing needed to invoke the tool correctly is missing, since return details are covered by the output 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?
The tool takes zero parameters, so per the rubric the baseline is 4. There are no parameter semantics for the description to clarify, and the schema is empty.
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 ('Shows') and clearly identifies the resource ('current resource pool source') plus its contents (roles, teams, people, calendars) and state (whether a unit of work is open). This distinguishes it from siblings like rillsoft_resource_pool_resource_get (single resource) and rillsoft_resource_pool_catalog_list (catalog listing).
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 states what the tool returns but gives no explicit when-to-use guidance, no alternatives, and no conditions for calling it versus siblings. Usage is only weakly implied by the read-only framing, matching the calibration case where a clear purpose without usage context scored 2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_resource_createCreate master data recordA
Creates a single element in the resource pool. Inside an open unit of work only (rillsoft_resource_pool_edit_open); nothing is stored before rillsoft_resource_pool_edit_save. The group is picked through 'group' and created where it does not exist yet.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | catalog the object comes from | |
| fields | No | fields of the new element. Permitted, depending on type: group, name, firstName, lastName, code, rank, email, calendarId, metric, teamId, roleId, machineRoleId, productivity, capacityType, capacity, employedFrom, employedTo, cost, costChange, notes, with employee and team additionally shiftCycles, and with project_customer additionally url, street, postalCode, city, region, country, contactPerson, phone. shiftCycles is the shift calendar as a list of { from, to, calendarId } (dates DD.MM.YYYY, to may be left out for a single day): in each period the named calendar applies instead of the assigned one. The periods must not overlap, and every calendarId has to exist in the pool. Read it back through rillsoft_resource_pool_resource_get |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | internal id of the element |
| code | No | code of the element; missing when none is set |
| name | No | name of the element |
| type | Yes | catalog of the element |
| group | No | name of the group; missing for people and without a group name |
| outcome | Yes | what the call did |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (not read-only, not destructive, not idempotent, not open-world). The description adds real behavior beyond that: the create is staged inside an edit session and discarded unless save is called, and a missing group is auto-created as a side effect. Error behavior if no edit session is open is left unstated.
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 sentences, purpose front-loaded, each carrying distinct information (what it creates, the edit-session prerequisite, the group side effect). Slightly awkward phrasing in 'The group is picked through group' but nothing wasted.
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?
An output schema exists, so return values need not be described. The transactional prerequisite and the group side effect are covered; the multi-catalog 'type' dimension is left entirely to the schema, which is acceptable given its oneOf structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is nominally 100%, but the field-level descriptions are placeholders like 'value of code', so the baseline is 3. The description earns a bump by explaining the 'group' parameter's semantics: it selects the group and creates it when it does not yet exist.
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: 'Creates a single element in the resource pool.' It is distinguishable from the sibling rillsoft_resource_pool_resource_update/delete/get by the create verb, though it never names those siblings explicitly.
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 a hard prerequisite: it must run 'Inside an open unit of work only (rillsoft_resource_pool_edit_open)' and nothing persists until rillsoft_resource_pool_edit_save. That is strong when-to-use context, but there is no guidance on when to prefer this over resource_update for existing entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_resource_deleteDelete master data recordADestructive
Deletes a single element of the resource pool. Where that leaves its group empty, the group goes with it. Inside an open unit of work only. Where something inside the pool still points at the element - a person on the role or team, a machine on the machine kind - the call is refused and names what refers to it, just as rillsoft_calendar_delete does. Assignments inside open projects are not checked: a project carries its own copy of the resource data, so deleting here does not reach into it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | internal id of the element; give exactly one of 'id' and 'code' | |
| code | No | code of the element; an ambiguous code makes the call fail | |
| type | Yes | catalog the object comes from |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | internal id of the element |
| code | No | code of the element; missing when none is set |
| name | No | name of the element |
| type | Yes | catalog of the element |
| group | No | name of the group; missing for people and without a group name |
| outcome | Yes | what the call did |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the destructiveHint/idempotentHint annotations: cascade deletion of an emptied group, the open-unit-of-work constraint, refusal-with-naming when referrers exist, and the important scope caveat that open-project assignments are a separate copy and untouched. This is exactly the kind of mutation context the annotations cannot convey.
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?
Purpose, cascade behavior and preconditions are front-loaded and dense with useful information. The fragment 'Inside an open unit of work only.' is slightly unpolished but its brevity is intentional and it earns its place as a hard constraint.
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 destructive mutation with an output schema present, the description covers cascade effects, preconditions, refusal semantics, and the project-copy scope limitation, leaving nothing an agent needs in order to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the id/code oneOf and the type enum are already fully documented in the schema. The description adds no parameter-level syntax or disambiguation beyond that, 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 and resource ('Deletes a single element of the resource pool') and immediately scopes it against siblings by naming rillsoft_calendar_delete as the analogous tool. An agent can tell this apart from rillsoft_element_delete or resource_pool_resource_update 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 a clear precondition ('Inside an open unit of work only') and precise refusal conditions when referenced by a person/role/team/machine. It does not explicitly route to an alternative tool for cases outside an open unit of work, but the context is strong enough to select the tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_resource_getRead master data recordARead-onlyIdempotent
Reads the complete master data of one object: a person with their identity, all their roles (efficiency, hourly rate), employment period, calendar, absences and shift cycles; a team with calendar, productivity and members; a customer with postal address and contact. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | id from rillsoft_resource_pool_catalog_list | |
| to | No | finish of the period, DD.MM.YYYY hh:mm; defaults to the project finish | |
| from | No | begin of the period for absences and shift cycles, DD.MM.YYYY hh:mm; defaults to the project start | |
| type | Yes | catalog the object comes from |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | internal id of the object |
| to | Yes | finish of the evaluated period, DD.MM.YYYY hh:mm |
| url | No | web address; only with project_customer |
| code | No | code; missing when none is set |
| cost | No | price per unit of quantity; only with material |
| from | Yes | begin of the evaluated period, DD.MM.YYYY hh:mm |
| name | Yes | display name |
| rank | No | professional qualification; only with role |
| type | Yes | catalog the object comes from |
| No | e-mail address; missing when none is set | |
| group | No | group the object belongs to; not reported for people |
| notes | No | notes; missing when empty |
| phone | No | phone number; only with project_customer |
| roles | No | all roles of the person; only with employee |
| active | No | true = employed within the project period; only with employee |
| metric | No | metric; only with material and machine_role |
| person | No | the person behind the person-by-role entry; only with employee |
| teamId | No | team; only with employee and machine, and only when set |
| address | No | postal address of the customer group; only with project_customer |
| absences | No | absences within the evaluated period |
| calendar | No | own calendar; missing when none is set |
| employedTo | No | employed to DD.MM.YYYY; only with employee |
| hourlyRate | No | cost rate per hour |
| employeeIds | No | person-by-role entries of the team; only with team |
| memberCount | No | number of members; only with team |
| shiftCycles | No | shift calendar: the periods in which a calendar other than the assigned one applies. The OWN cycles of the object, complete and not cut to the queried period - what rillsoft_resource_pool_resource_update writes back. Do not confuse this with the display switch view.calendarCycle of rillsoft_view_state_apply, which only shows the shift bars |
| employedFrom | No | employed from DD.MM.YYYY; only with employee |
| productivity | No | productivity of the team; only with team |
| contactPerson | No | contact person; only with project_customer |
| machineRoleId | No | machine role; only with machine and only when set |
| costExceptions | No | time-dependent cost factors |
| shiftCyclesEffective | No | the shift calendar as the scheduling applies it: the own cycles plus the ones inherited from the team, resolved day by day. Where both carry the same day, the calendar of the team wins. Only with employee; a team has nothing to inherit from, so there shiftCycles is already the effective list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so 'Read-only, no undo step' is largely a restatement of what structured data provides. The description adds no behavioral context the annotations lack, e.g. that from/to scope only absences and shift cycles, or what happens for an unknown id/type.
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?
Front-loaded with the verb and resource, then a dense but useful enumeration of per-type payloads, closing with the read-only note. One sentence is long and list-heavy, but no sentence 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?
An output schema exists so return values need no explanation, and the annotation set covers the safety profile. The description is adequately complete for a single-record read, with only minor gaps: the from/to period semantics and how this tool differs from the other resource-pool read tools.
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 baseline is 3. The description does add semantic value by mapping type values to returned content (person/team/customer), but it only covers three of the nine enum values (role, material, machine, machine_role, project_category, project_status, project_customer are unaddressed), and it never mentions the from/to period windows at all.
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 clear verb+resource ('Reads the complete master data of one object') and enumerates what each object type returns (person, team, customer fields), so the agent knows exactly what data comes back. It does not name or differentiate itself from the nearby siblings rillsoft_resource_pool_get and rillsoft_resource_pool_catalog_list, so an agent must infer which of these three resource-pool reads 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?
Usage is only implied: read one object's master data. There is no explicit when-to-use versus rillsoft_resource_pool_get (pool-level read) or the *_resource_update/create/delete siblings, and no prerequisites such as needing an id obtained from catalog_list. The schema hint on 'id' partially compensates but the description itself offers no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_resource_updateUpdate master data recordAIdempotent
Changes a single element of the resource pool as a partial update. Inside an open unit of work only. Absences cannot be changed here; the absence tools cover them.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | internal id of the element; give exactly one of 'id' and 'code' | |
| code | No | code of the element; an ambiguous code makes the call fail | |
| type | Yes | catalog the object comes from | |
| fields | No | only the fields given are changed; every other attribute stays as it is. Which keys are permitted follows from 'type' - the alternatives below name them per catalog. With employee and team there is shiftCycles as well, the shift calendar as a list of { from, to, calendarId } (dates DD.MM.YYYY, to may be left out for a single day). It is written as a whole: leaving the field out keeps the stored cycle, an empty array deletes it. The periods must not overlap, and every calendarId has to exist in the pool |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | internal id of the element |
| code | No | code of the element; missing when none is set |
| name | No | name of the element |
| type | Yes | catalog of the element |
| group | No | name of the group; missing for people and without a group name |
| outcome | Yes | what the call did |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds context the annotations do not: the open-unit-of-work precondition and the fact that absences are out of scope. It does not restate what is destroyed, but destructiveHint=false makes that unnecessary.
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 tight sentences, front-loaded with the core action, followed by the precondition and the exclusion. No redundancy and nothing padding the text.
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 a rich oneOf schema, full annotation coverage and an output schema, the description only needs to add the operational constraints, which it does via the unit-of-work rule and the absence exclusion. It stops short of tying the update to the resource_pool_edit_open/save workflow, but nothing an agent needs 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?
Schema description coverage is 100% and the schema exhaustively documents id/code/type/fields and the per-catalog field sets. The description only adds 'single element' and 'partial update', which the schema's 'only the fields given are changed' already conveys. Baseline 3 is correct when the schema carries the parameter burden.
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: 'Changes a single element of the resource pool as a partial update.' The partial-update framing is precise and tells the agent this is not a full overwrite. It distinguishes itself from the absence siblings but never contrasts with resource_create/delete/get, which are the closest neighbors.
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 precondition ('Inside an open unit of work only') and an explicit exclusion with the alternative ('Absences cannot be changed here; the absence tools cover them'). It lacks a positive 'when to use this rather than resource_create' statement, but the when-not and alternative routing are clearly present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_ris_listList RIS clientsARead-onlyIdempotent
Lists the clients of the Rillsoft Integration Server whose resource pool the logged-in user may read - the clientId is what rillsoft_resource_pool_ris_select takes - and reports selectedClientId where the active pool already comes from the server. Runs with the login of the desktop session and never asks for credentials. A pool file is selected through rillsoft_resource_pool_file_select instead. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| server | Yes | URL of the Rillsoft Integration Server the desktop session is logged in to |
| clients | Yes | every client whose resource pool the user may read |
| clientId | Yes | id of the logged-in client; -1 while none is selected |
| userName | Yes | user name of the desktop session |
| selectedClientId | No | client of the active resource pool; missing while a pool file is active |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description adds genuinely new context: it runs under the desktop session login, never prompts for credentials, and has no undo step. It also notes the tool surfaces selectedClientId when the active pool comes from the server. Not a full behavioral picture (no mention of failure modes when no pool is reachable), but well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph that front-loads the purpose before the routing and auth notes, which is the right order. It is slightly overpacked with subordinate clauses, but every sentence carries a distinct fact rather than 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?
For a zero-parameter read tool with an output schema and rich annotations, the description supplies the remaining unknowns: permission scoping, auth model, the idempotent/no-undo behavior, and the relationship to the two sibling selection tools. Nothing an agent needs in order to call this 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 there is nothing for the description to disambiguate; per the rubric this is a baseline 4. The description does not waste space inventing parameter guidance, which is correct here.
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 ('Lists the clients of the Rillsoft Integration Server') and immediately scopes it to the logged-in user's readable resource pools, so it is distinguishable from sibling list tools like rillsoft_portfolio_ris_list or rillsoft_project_ris_list. An agent knows exactly what comes back before 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?
Explicitly names the downstream consumer ('the clientId is what rillsoft_resource_pool_ris_select takes') and names the alternative path for a different case ('A pool file is selected through rillsoft_resource_pool_file_select instead'). This is exactly the when-to-use / when-not-to-use routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_pool_ris_selectSelect RIS resource poolAIdempotent
Switches the global resource pool to the pool of a client on the Rillsoft Integration Server and makes that client the logged-in client of the session (clientId of the other RIS tools). Possible only on a new, unmodified project and without an open unit of work, so call rillsoft_project_create first. A pool file is selected through rillsoft_resource_pool_file_select instead. Runs with the login of the desktop session and never asks for credentials. No undo step; the setting holds application-wide and survives a restart.
| Name | Required | Description | Default |
|---|---|---|---|
| clientId | Yes | id of the client on the server whose resource pool becomes the global pool, from rillsoft_resource_pool_ris_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | path of the pool file; only with source file |
| roles | Yes | number of qualifications |
| teams | Yes | number of teams |
| client | No | tenant; only with source ris |
| source | Yes | origin of the resource pool |
| workUnit | Yes | state of the unit of work on the pool |
| calendars | Yes | number of calendars |
| employees | Yes | number of people |
| versionId | Yes | id of the pool version that was loaded from the server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which cover idempotency and non-destructiveness), the description discloses the session side effect (the client becomes the logged-in client used as clientId by other RIS tools), auth behavior (desktop session login, never prompts for credentials), persistence (application-wide, survives restart), and irreversibility (no undo step). These are exactly the traits annotations cannot convey.
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?
Front-loads the core action, then layers preconditions, alternative, auth, and persistence in tight sentences. Every sentence carries a distinct constraint or consequence 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?
Output schema exists so return values need not be described, and the description fully covers preconditions, side effects, auth, and persistence for a stateful global-setting tool. Nothing an agent needs 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?
Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema does not: the selected clientId also becomes the session's logged-in client referenced by the other RIS tools, not just the pool source. That cross-tool consequence is genuinely useful beyond the property 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 and resource ('Switches the global resource pool to the pool of a client on the RIS') and explicitly separates itself from the similarly named sibling rillsoft_resource_pool_file_select. An agent can distinguish it from the file-select variant without opening either 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 explicit preconditions ('only on a new, unmodified project and without an open unit of work'), a prerequisite action ('call rillsoft_project_create first'), and the alternative to use otherwise ('rillsoft_resource_pool_file_select'). This is full when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_usage_listList tasks using a resourceARead-onlyIdempotent
Reports per task whether it carries one resource and with which values - the page 'Using tasks' of the capacity planning, read through the contract. Every task of the range appears, carrying or not; alreadyAssigned tells them apart. Per kind exactly its own columns: role and machine_role a count, team a productivity, employee an efficiency and who answers for the task, material an amount and a calculation mode, and everything but material a utilization. Team, employee and machine carry free on top - the capacity left within the task period - and team and employee availability from the calendar; employee adds employeeBalanceHours, absences, the compensator and whom the assignment stands in for. Hours are hours, never the volume unit of the view. Read-only, no undo step. Writing goes through rillsoft_resource_usage_set, which takes five of the six kinds - team assignments on tasks are not part of the write contract.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | resource type; all six kinds are readable | |
| taskUuids | No | UUIDs of the tasks; empty means every task of the visible project or subproject | |
| resourceId | Yes | id of the resource from rillsoft_resource_pool_catalog_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | name of the resource |
| type | Yes | resource type |
| tasks | Yes | the tasks evaluated, in the order of the project |
| resourceId | Yes | id of the resource in the resource pool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds real context beyond that: no undo step, that every task in the range appears whether or not it carries a resource (distinguished by alreadyAssigned), and that hours are reported in hours rather than the view's volume unit. Pagination and response shape are left to 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the body is a single sprawling run-on sentence with dashes that is hard to parse and mixes return-column detail with usage guidance. It is not padded with filler, but the structure is poor for an agent scanning for the key facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 3-parameter tool with an output schema and full annotation coverage, the description is largely complete: it covers the read/write boundary, the empty-taskUuids semantics (also in schema), and the per-kind column meanings. Nothing critical for invoking 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?
Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining what each enum value of 'type' actually returns (role/machine_role a count, team a productivity, employee an efficiency, material an amount and calculation mode). That meaningfully enriches the enum beyond the schema's one-line 'all six kinds are readable'.
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 opening clause states a specific verb and resource: it reports per task whether a resource is carried and with which values, scoped to the capacity-planning 'Using tasks' page. It also distinguishes itself from the write sibling rillsoft_resource_usage_set. The prose is dense and slightly cryptic ('read through the contract'), which keeps it from a clean 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?
It explicitly states the write path goes through rillsoft_resource_usage_set and adds the important exclusion that team assignments on tasks are not part of the write contract, so an agent knows this tool is the read side. It does not, however, contrast itself with other read siblings such as resource_pool_catalog_list or resource_absence_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_resource_usage_setAssign a resource to several tasksAIdempotent
Puts one resource on several tasks at once, or takes it off them, with the single values per task - the page 'Using tasks' of the capacity planning, written through the contract. One call is exactly one undo step for all of them, labelled like the page. quantity 0 removes, as with the five single-task tools. Each entry carries only the fields the page offers for that kind (rillsoft_resource_usage_list documents them); a field that belongs to another kind, or one the page merely displays such as free, is refused by name. Every check runs before the change: a single unknown UUID leaves the project untouched and creates no undo step. team is not part of this contract - assigning a team to a task belongs to the Standard edition alone; read it through rillsoft_resource_usage_list and set the preferred team of a project through rillsoft_project_team_preference_set. Beware of the neighbour: rillsoft_task_resource_assignment_fill is the wizard, filling tasks automatically out of their roles and without single values; this one fills exactly the tasks named, with them.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | resource type; team is missing on purpose - see the description | |
| resourceId | Yes | id of the resource from rillsoft_resource_pool_catalog_list | |
| assignments | Yes | one entry per task; each UUID at most once |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | name of the resource |
| type | Yes | resource type |
| tasks | Yes | the tasks after the change, in the order of assignments[] |
| skipped | Yes | skipped tasks with the cause |
| resourceId | Yes | id of the resource in the resource pool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (not read-only, not destructive, idempotent); the description adds unusually valuable behavior: 'One call is exactly one undo step', validation is atomic ('a single unknown UUID leaves the project untouched and creates no undo step'), and out-of-kind fields are 'refused by name'. That is meaningful disclosure beyond structured fields.
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?
Content is front-loaded with the core action, but the prose is a single dense block with run-on clauses ('with the single values per task - the page "Using tasks" of the capacity planning, written through the contract') that are hard to parse. Little is padding, but the structure impedes fast comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema present, the description covers the remaining gaps: atomic validation, undo granularity, per-type field validity, and routing to alternatives for team and for bulk wizard-style filling. Nothing an agent needs 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?
Schema coverage is 100% and each field is already documented, so the baseline is 3. The description still adds cross-cutting semantics the schema cannot express: which fields are valid per resource type, that read-only fields such as 'free' are rejected rather than ignored, and that team-based fields are excluded by contract.
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 with scope: 'Puts one resource on several tasks at once, or takes it off them.' It further distinguishes itself from the five single-task siblings and from the wizard tool by name, so an agent can differentiate without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly covers when-not and alternatives: 'quantity 0 removes', 'team is not part of this contract ... read it through rillsoft_resource_usage_list and set the preferred team ... through rillsoft_project_team_preference_set', and contrasts with 'rillsoft_task_resource_assignment_fill is the wizard'. Nothing about selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_row_selection_applyApply row selectionARead-onlyIdempotent
Selects one row of the visible resource or capacity view - the same effect as clicking it. The row is scrolled into view and the property sheet of the info window follows, exactly as it does on a click. A row whose parent is collapsed is not addressable; open it first through rillsoft_outline_apply. In any other view the call fails and points at rillsoft_view_state_apply. No undo step and no change to the plan itself - no task, no assignment, no date moves; that is why this tool counts as read-only. What it does change is the way the project is displayed: the selected row is stored with the project, and going through the user interface marks the document as changed, so a later save writes it along. Pass taskUuid inside row to select a task listed under that row instead of the row itself - the detail rows have no coordinate of their own, they hang below their group row; that is what makes the gantt secondary view show the task with its links. It answers like rillsoft_row_selection_get.
| Name | Required | Description | Default |
|---|---|---|---|
| row | Yes | coordinates of the row to select, as rillsoft_outline_get reports them under openRows; add taskUuid to select a task listed under that row instead |
Output Schema
| Name | Required | Description |
|---|---|---|
| row | No | coordinates of the selected row; missing when none is selected |
| level | No | zero-based grouping level of the selected row; missing when none is selected |
| selected | Yes | false = no row is selected; then row is missing |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the scroll-into-view side effect, that a collapsed parent row is not addressable, that there is no undo step, and that despite being read-only it persists the selection into the project so a later save writes it along. It even reconciles that nuance with the readOnlyHint annotation, which is exactly the kind of context annotations cannot convey.
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 core behavior is front-loaded and every sentence carries substance, but the passage is long and the closing 'It answers like rillsoft_row_selection_get' is somewhat redundant given an output schema exists. Dense rather than bloated, but not maximally tight.
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 nested-object selection tool it covers prerequisites, failure conditions, side effects, and persistence behavior, and an output schema already carries return shape. An agent has everything needed to call it correctly in one pass.
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 already 100%, so the baseline is 3, but the description adds real meaning: it explains *why* taskUuid selects a detail row ('the detail rows have no coordinate of their own, they hang below their group row') and the downstream effect on the gantt secondary view. It largely reinforces schema text rather than introducing new format details.
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 ('Selects one row of the visible resource or capacity view') and anchors it to a familiar user action ('the same effect as clicking it'). It explicitly differentiates itself from siblings by naming rillsoft_row_selection_get, rillsoft_outline_apply, and rillsoft_view_state_apply.
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 explicit when-to-use context, names the failure case ('in any other view the call fails and points at rillsoft_view_state_apply'), and names the prerequisite path for collapsed parents ('open it first through rillsoft_outline_apply'). Alternatives are surfaced rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_row_selection_getRead row selectionARead-onlyIdempotent
Reads which row of the visible resource or capacity view is selected, in the same coordinates the report uses per row. selected:false means none is. In any other view the call fails and points at rillsoft_view_state_apply. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| row | No | coordinates of the selected row; missing when none is selected |
| level | No | zero-based grouping level of the selected row; missing when none is selected |
| selected | Yes | false = no row is selected; then row is missing |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavior: the call hard-fails outside resource or capacity views and points to another tool. The trailing 'Read-only, no undo step' largely restates the annotations, so it is useful context but partly redundant.
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 what is read and where it applies; nothing is padded. The final read-only clause duplicates the annotations and could be dropped without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema and full annotation coverage, the description covers the remaining gaps: applicable view scope, empty-result semantics, and the failure/fallback path. An agent has everything needed 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?
The tool takes zero parameters, so per the rubric the baseline is 4. The mention of 'selected:false' describes an output field rather than an input, and the output schema already covers returns.
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 concrete verb+resource ('Reads which row ... is selected') and scopes it to the resource/capacity view, which separates it from the many view/report siblings. It also clarifies the result semantics ('selected:false means none is'), so an agent knows what an empty answer looks like 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 negative condition ('In any other view the call fails') and routes the agent to rillsoft_view_state_apply in that case, which is real routing guidance. It does not, however, say when reading the selection is the right thing to do versus its setter counterpart rillsoft_row_selection_apply, so the primary usage context is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_session_dialogs_setSet recording mode for message boxesARead-onlyIdempotent
Switches the recording mode of this session: with visible true, every following call that would show a message box in the user interface - a warning, a hint, the question about moving fixed dates - shows the real box on screen for screenshots, and a timer closes it after autoCloseSeconds with the answer chosen by autoAnswer. A person who clicks earlier wins. The call that showed a box returns only once the box is closed, so run it in the background and take the picture meanwhile; every other tools/call sent while a box stands is refused with dialog_open and the remaining seconds. Each box shown is reported in _meta.dialogs[] of the answer with title, text, buttons, answer and shownMs. After a server start the mode is off. No undo step, no change to the project. It answers with the state now in force.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | next (the default) holds for the next mutating call of this session only and is used up by it, whether it showed a box or not; session holds until visible is set to false or the session ends. Ignored when visible is false | next |
| visible | Yes | true switches the recording mode on, false switches it off. While it is on, every call of this session that would show a message box in the user interface shows that same box on screen, and a timer closes it | |
| autoAnswer | No | escape (the default) presses what the Escape key would press - Cancel where there is one, else No, else OK - which is exactly the answer a call gives without the mode, so error code, text and project stay the same. enter presses the default button of the box; on the question about moving fixed dates that is Yes, so the command is carried out and the fixed elements move along - the result then differs from a call without the mode. Ignored when visible is false | escape |
| autoCloseSeconds | No | seconds a box stays on screen before the timer answers it, 1 to 60 (defaults to 10); ignored when visible is false |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | No | next = the next mutating call uses the mode up, session = it holds until switched off; missing while the mode is off |
| visible | Yes | true = the recording mode is on for this session |
| autoAnswer | No | what the timer presses: escape = Cancel, else No, else OK; enter = the default button; missing while the mode is off |
| autoCloseSeconds | No | seconds a box stays on screen before the timer answers; missing while the mode is off |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly/idempotent/non-destructive), yet the description adds substantial behavioural context: the auto-timer with autoCloseSeconds, that a human click pre-empts the timer, that concurrent tools/call are refused with 'dialog_open' plus remaining seconds, and that boxes are reported in _meta.dialogs[]. It also reconciles the state-change nature of the tool with readOnlyHint by explicitly stating 'No undo step, no change to the project' and resetting the mode after a server start.
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 purpose is front-loaded, but the body is a single run-on construction stitched together with dashes and semicolons ('...shows the real box on screen for screenshots, and a timer closes it after autoCloseSeconds...', '...refused with dialog_open and the remaining seconds'), which makes it hard to scan. Every fact is relevant, but the structure costs readability.
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 high-complexity session-mode tool with an output schema, the description covers purpose, side effects, lifecycle and interaction with other calls well, and it need not restate the return shape. The one material hole is the consumption semantics of the default `scope=next` (used up by the next mutating call even if no box appeared), which matters for correct invocation yet appears only in 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 100%, so all four parameters (including `scope`) are already documented, which sets the baseline at 3. The prose adds colour for `visible` and `autoAnswer=enter` (fixed dates move, result differs from a non-recorded call), but `scope` — arguably the most error-prone parameter — is never mentioned in the description, so it does not exceed the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause gives a specific verb+resource ('Switches the recording mode of this session') and the remainder immediately operationalises it: subsequent message boxes are shown on screen for screenshots. No sibling in the list competes with it, and no sibling does anything similar, so the agent can identify it instantly.
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 states the operative context clearly: switch the mode on before a call that would raise a message box, run that call in the background, and take the picture meanwhile. The strategy of running the box-showing call in the background is exactly the guidance an agent needs, but there is no explicit 'when not to use' statement and the `scope` choice (next vs session) is left entirely to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_subproject_createCreate subprojectA
Creates a subproject (a summary task) and returns its UUID. It creates an empty one - grouping elements that already exist into a new subproject goes through rillsoft_element_subproject_group. Changing it afterwards goes through rillsoft_subproject_update, deleting it through rillsoft_subproject_delete. In a portfolio parentUuid names a project or a subproject inside it - nothing is created directly below the portfolio, as in the user interface. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the subproject | |
| start | No | start, DD.MM.YYYY hh:mm; defaults to the start of the parent | |
| finish | No | finish, DD.MM.YYYY hh:mm; defaults to the finish of the parent | |
| parentUuid | No | UUID of the parent project or subproject; empty = the main project |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readonly, non-idempotent, non-destructive. The description adds real behavioral context beyond them: the operation creates an *empty* subproject, returns its UUID, counts as 'One undo step', and cannot create anything directly below a portfolio. It doesn't cover error/permission behavior, so not 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?
Front-loaded with the core action and return value, then alternative routing, then the portfolio edge case, then the undo note. Every sentence carries distinct information 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?
An output schema exists so return values need no prose beyond the UUID mention, and annotations carry the safety profile. The description covers the creation scope, the empty-subproject constraint, routing alternatives, and portfolio semantics, leaving nothing 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 coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema for parentUuid by explaining its portfolio semantics (names a project or subproject inside it) and the constraint that nothing is created directly below the portfolio. That is genuine added value over the schema's 'empty = the main project'.
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 (Creates) and resource (subproject, clarified as a summary task) and adds the return value (UUID). It is immediately distinguishable from sibling tools like rillsoft_project_create and rillsoft_task_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: grouping existing elements goes through rillsoft_element_subproject_group, later modification through rillsoft_subproject_update, deletion through rillsoft_subproject_delete. This is exactly the when-to-use-this-vs-alternatives guidance the dimension rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_subproject_deleteDelete subprojectADestructive
Deletes a subproject together with everything inside it. Refused where the UUID names a task - rillsoft_task_delete does that one, and rillsoft_element_delete takes either kind. The main project cannot be deleted; use rillsoft_project_create for a fresh one. Creating goes through rillsoft_subproject_create, changing through rillsoft_subproject_update. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the subproject |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | UUID of the subproject that was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation is known. The description adds meaningful context beyond that: the delete is cascading ('everything inside it'), refused for task UUIDs, and the main project is protected. The 'One undo step' line discloses reversibility, which annotations do not cover. It could have mentioned permission or confirmation requirements, but the coverage is strong.
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?
Four sentences, zero waste. The cascade scope is front-loaded, the sibling routing follows, and the undo note closes it. Every sentence carries a distinct operational fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a destructive single-parameter tool with annotations and an output schema, this description covers the critical unknowns: what gets destroyed (whole subtree), what is refused (task UUIDs), what is protected (main project), which siblings handle adjacent cases, and reversibility (one undo step). Nothing an agent needs to act safely 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?
Schema coverage is 100% and there is only one parameter (uuid), so schema already fully documents the input. The description adds no parameter-level detail (e.g., format of UUID, whether it must be a subproject UUID vs task UUID – though the refusal clause implies it). Baseline 3 for full schema coverage with minimal added semantics.
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 (delete subproject) and immediately clarifies the cascading scope ('together with everything inside it') and what cannot be deleted (the main project). It distinguishes itself from sibling delete tools (rillsoft_task_delete, rillsoft_element_delete) by explicit routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use rillsoft_task_delete or rillsoft_element_delete instead, and points to rillsoft_project_create for a fresh project. It also covers the refusal case (task UUID). This is a full routing map, not just a hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_subproject_updateUpdate subprojectAIdempotent
Changes a subproject: name, start, finish, notes, pinning, calendar, color and code. The main project goes through rillsoft_project_update, a task through rillsoft_task_update, and deleting the subproject through rillsoft_subproject_delete. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | code of the subproject, the free text field of the dialog; an empty string clears it. RP does not check it for uniqueness | |
| name | No | new name | |
| uuid | Yes | UUID of the subproject | |
| color | No | bar color as #RRGGBB or 'automatic' | |
| fixed | No | pin the start of the subproject (true) or release it (false); a pinned subproject stays in place under rillsoft_project_reschedule | |
| notes | No | notes on the subproject | |
| start | No | start, DD.MM.YYYY hh:mm | |
| finish | No | finish, DD.MM.YYYY hh:mm | |
| calendarId | No | id of the calendar from rillsoft_resource_pool_catalog_list (types: calendar); 0 inherits the calendar of the parent element | |
| primaryColor | No | pass the color on to child elements that carry none of their own |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent=true, destructive=false and readOnly=false, so the safety profile is covered. The description adds a genuinely non-annotation behavior: 'One undo step,' telling the agent the change is a single reversible history entry. It stops short of saying what happens to fields not supplied (partial vs full update), which would push it to 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?
Two tight sentences, front-loaded with the action and fields, followed by the routing alternatives and the undo note. The field enumeration partially duplicates the schema, but it aids quick scanning and keeps the description compact.
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 an output schema present, return values need no explanation, and the annotations carry the safety profile. The description covers scope, routing and undo semantics; the only minor gap is behavior for omitted fields on a partial update.
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's meaning, formats and the date pattern are already documented in the schema. The description only echoes the field list and adds no syntax or constraints beyond it, so the baseline of 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?
States a specific verb and resource ('Changes a subproject') and enumerates exactly what can be changed (name, start, finish, notes, pinning, calendar, color, code). It also names the sibling tools for the adjacent objects, so an agent can immediately distinguish it from rillsoft_project_update, rillsoft_task_update and rillsoft_subproject_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: main project -> rillsoft_project_update, task -> rillsoft_task_update, deletion -> rillsoft_subproject_delete. This is textbook when-to-use-this-vs-alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_createCreate taskA
Creates a task (RP computes the dates through the calendar) and returns its UUID. Changing it afterwards goes through rillsoft_task_update, moving it in the structure through rillsoft_element_move, deleting it through rillsoft_task_delete. In a portfolio parentUuid names a project or a subproject inside it - nothing is created directly below the portfolio, as in the user interface. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the task | |
| notes | No | notes on the task | |
| start | No | start, DD.MM.YYYY hh:mm; defaults to the start of the parent | |
| finish | No | finish, DD.MM.YYYY hh:mm (durationHours is the alternative) | |
| fixedType | No | task type: duration, effort, duration_effort (defaults to the application default from the settings). It says which quantity RP holds fixed while computing: duration keeps the duration, effort keeps the effort, duration_effort keeps both. This matches the choice in the task dialog | |
| milestone | No | true = milestone (duration 0, date fixed) | |
| parentUuid | No | UUID of the project or subproject; empty = the main project | |
| durationHours | No | duration in hours (finish is the alternative) |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| milestone | Yes | true = the task that was created is a milestone |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the mutation profile is known. The description adds genuine context beyond that: dates are computed by RP through the calendar rather than taken literally, and the operation consumes exactly one undo step. Missing only things like selection/visibility side effects on the newly created task.
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 sentences: what it does and returns, then the sibling routing, then the parentUuid constraint. Front-loaded with the primary action and no filler; every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% schema description coverage, the description only needs to carry behavioral and routing context — calendar-driven date computation, undo semantics, sibling routing, and the portfolio constraint all present. Nothing an agent needs to call this 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?
Schema description coverage is 100%, so the baseline is 3. The description earns extra by clarifying parentUuid semantics (it names a project or subproject within a portfolio, and never the portfolio itself), which goes beyond the schema's terse "UUID of the project or subproject; empty = the main project".
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 ("Creates a task") plus two concrete outcomes: RP computes dates through the calendar and a UUID is returned. It then names the sibling tools for the adjacent operations (task_update, element_move, task_delete), making it trivially distinguishable from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to alternatives for follow-up operations (changing, moving, deleting) and states a hard usage constraint for parentUuid: nothing can be created directly below the portfolio, unlike the UI. Both when-to-use and when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_deleteDelete taskADestructive
Deletes a task together with its dependencies. Refused where the UUID names a subproject - rillsoft_subproject_delete does that one, and rillsoft_element_delete takes either kind. Creating goes through rillsoft_task_create, changing through rillsoft_task_update. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the task |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | UUID of the task that was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=false, but the description adds behavior beyond them: the cascade delete of dependencies, the refusal condition on subproject UUIDs, and the undo implication ('One undo step'). That is substantive disclosure not present in the structured fields.
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?
Front-loaded with the core action and cascade behavior, then routing information. Dense and mostly waste-free, though the create/update routing sentence is a little incidental to a delete operation.
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 an output schema present, return values need not be explained, and annotations cover the safety profile. The description supplies the routing, cascade, refusal, and undo context an agent needs to invoke 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?
Only one parameter, documented at 100% coverage in the schema, so the schema does the heavy lifting. The description references UUID semantics (what happens when it names a subproject) but adds no format or syntax detail. 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+resource (deletes a task) and adds scope detail (together with its dependencies). It explicitly distinguishes itself from rillsoft_subproject_delete and rillsoft_element_delete, so an agent can route without opening schemas.
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?
Explicit when-to-use and when-not: refused if the UUID names a subproject, with the alternative named (subproject_delete), plus element_delete as the either-kind option. It also routes create and change to their siblings, covering the full operation set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_dependency_createCreate dependencyAIdempotent
Creates a dependency between two tasks. It links existing tasks; it does not create them, and it does not move them - RP computes the new dates from the link. Removing it again goes through rillsoft_task_dependency_delete. In a portfolio, as in the user interface: across the project boundary a file portfolio refuses the dependency; a portfolio of the Integration Server creates it on the server as a RIS link (finish-start, start-start, finish-finish or start-finish with an absolute lag). One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | finish_start is the default: the successor begins once the predecessor is done, and a distance in between is allowed. Use finish_start_no_delay only where the successor has to follow immediately with no delay at all. Besides those: start_start (both begin together), finish_finish (both end together) and start_finish (the successor ends when the predecessor begins) | finish_start |
| successorUuid | Yes | UUID of the successor | |
| predecessorUuid | Yes | UUID of the predecessor | |
| dependencyDistanceType | No | absolute (the default) counts plain time, calendar counts calendar time, relative counts a share of the task duration | absolute |
| dependencyDistanceHours | No | distance in hours (with dependencyDistanceType absolute or calendar) respectively a share (relative) |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | kind of the created dependency; finish_start is the default |
| successorUuid | Yes | UUID of the successor |
| predecessorUuid | Yes | UUID of the predecessor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, destructive=false, and the description enriches this with genuine behavioral context: RP recomputes dates from the link, file portfolios refuse cross-project dependencies while an Integration Server portfolio creates a RIS link, and the change consumes one undo step. The refusal/failure condition and undo semantics are exactly what annotations cannot convey.
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?
Front-loads the core action and the negative scoping ('does not create them, does not move them') before the more complex portfolio paragraph. The portfolio sentence is dense and multi-clause but every element carries information; slightly long but not wasteful.
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 write tool with an output schema (so return values needn't be explained) and annotations covering the safety profile, the description closes the remaining gaps: side effects on dates, portfolio-dependent behavior, failure conditions, and undo. An agent has everything needed to invoke 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 coverage is 100%, so all five parameters, both enums, and the distance semantics are already fully documented in the schema. The description echoes the dependency types and lag concept but adds no syntax or format detail beyond what the schema provides, so the 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?
States a specific verb and resource ('Creates a dependency between two tasks') and immediately draws the boundary against sibling task_create by clarifying it links existing tasks rather than creating or moving them. An agent can distinguish this from task_create and task_dependency_delete without opening any 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 clear context on when this applies (linking existing tasks, date recomputation by RP) and names the removal path (rillsoft_task_dependency_delete). It lacks an explicit when-not or alternative-routing statement beyond the create/delete contrast, but the intended use case is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_dependency_deleteDelete dependencyADestructive
Deletes the dependency between two tasks. Only the link goes; both tasks stay, and deleting a task itself goes through rillsoft_task_delete. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | dependency type; omit it to hit the first dependency found for the pair | |
| successorUuid | Yes | UUID of the successor | |
| predecessorUuid | Yes | UUID of the predecessor |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | kind of the dependency that was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description still adds real value beyond that: it specifies the blast radius ('Only the link goes; both tasks stay') and the undo behavior ('One undo step'), which is exactly the kind of mutation context annotations cannot convey.
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 its scope, with the sibling routing and undo note following. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description covers scope, sibling routing, and undo depth. It leaves one small gap: it doesn't say what happens when the specified dependency does not exist, which matters given idempotentHint=false.
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%, including the enum and the meaning of omitting the type field, so the schema already carries the parameter burden. The description adds no syntax or selection guidance beyond it, making the baseline 3 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?
States a specific verb and resource ('Deletes the dependency between two tasks') and immediately scopes it against the look-alike sibling by clarifying that the tasks themselves survive and that task removal is handled by rillsoft_task_delete. An agent can distinguish this from rillsoft_task_delete and rillsoft_task_dependency_create without opening any 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?
Provides a clear routing rule away from this tool for task removal ('deleting a task itself goes through rillsoft_task_delete'), which is the most likely confusion point. It does not, however, cover adjacent cases such as changing a dependency's type instead of deleting it, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_employee_assignment_setAssign personAIdempotent
Assigns one specific existing person to a task, or removes that assignment with quantity 0. It touches one task - one person across many tasks goes through rillsoft_resource_usage_set, and filling many tasks at once through rillsoft_task_resource_assignment_fill. The master data stays untouched; an overload over time is a legitimate planning state and shows up in the report. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| quantity | Yes | 1 assigns, 0 removes the assignment | |
| taskUuid | Yes | UUID of the task | |
| employeeId | Yes | id of the person from rillsoft_resource_pool_catalog_list | |
| utilization | No | utilization greater than 0 up to 1 (defaults to 1) |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| employeeAssignments | Yes | the assignments of the task after the change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent=true and destructive=false, so the description correctly doesn't restate that. It adds real context beyond the annotations: master data is untouched, an overload over time is a legitimate (non-blocked) planning state surfaced in the report, and the change costs one undo step. Missing only details like required permissions.
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 core action is front-loaded in the first clause, followed by alternatives and side-effect notes. Three tight sentences with no filler or repetition.
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?
An output schema exists, so return values need no explanation. Combined with full schema coverage and rich annotations, the description supplies the routing, reversibility, and validation context 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 coverage is 100%, so all four parameters (including utilization with its default and bounds) are already documented in the schema. The description restates the quantity=1/0 semantics but adds nothing the schema does not already carry, 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?
States a specific verb and resource ('Assigns one specific existing person to a task') and covers the inverse operation via 'quantity 0'. It explicitly names the sibling tools it is not (rillsoft_resource_usage_set, rillsoft_task_resource_assignment_fill), so an agent can distinguish it without opening any 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 explicit routing rules: this tool is for one task–one person, resource_usage_set for one person across many tasks, and task_resource_assignment_fill for filling many tasks at once. When-to-use and the alternatives are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_machine_assignment_setAssign machineAIdempotent
Assigns one specific existing machine to a task, or removes that assignment with quantity 0. The twin of rillsoft_task_employee_assignment_set; machines carry neither an employment period nor an efficiency. It touches one task - letting several tasks share one machine goes through rillsoft_machine_sharing_create. The master data stays untouched; an overload over time is a legitimate planning state and shows up in the report. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| quantity | Yes | 1 assigns, 0 removes the assignment | |
| taskUuid | Yes | UUID of the task | |
| machineId | Yes | id of the machine from rillsoft_resource_pool_catalog_list | |
| utilization | No | utilization greater than 0 up to 1 (defaults to 1) |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| machineAssignments | Yes | the assignments of the task after the change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond annotations: master data untouched, overload over time is a legitimate state surfaced in the report, and exactly one undo step. Annotations already cover idempotency, non-destructiveness and non-readOnly. Doesn't state required permissions, but the note about master data staying intact covers the main risk.
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?
Four tight sentences: action, sibling differentiation, scoping constraint, side effects. The undo-step note is front-loaded at the end as a close, with no filler. Front-loaded with the core action.
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?
Complete for a mutation tool with an output schema: schema covers all params, annotations cover safety, and the description adds the one behavioral risk (overload is allowed, not an error) plus the undo semantics. An agent can call it correctly from this.
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 baseline is 3. The description's only added semantic is the quantity 0 removal case, which the schema already documents; utilization and machineId sourcing are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (assigns) and resource (a specific existing machine to a task), and explicitly covers the removal case via quantity 0. It distinguishes itself from the twin rillsoft_task_employee_assignment_set and from rillsoft_machine_sharing_create by naming both.
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?
Routes clearly: single-machine single-task use here, multi-task sharing through rillsoft_machine_sharing_create, and the employee variant for people. The quantity-0 removal path is spelled out, so an agent knows when to call it for unassignment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_machine_role_assignment_deriveDerive machine kinds from assignmentsADestructiveIdempotent
The 'Derive machine kinds from the assignment' wizard: rebuilds the machine role assignments of each task out of the concrete machines assigned to it - existing machine role assignments are replaced, quantity and volume are formed from those machines. Reports them under machineRoleAssignments[]. People are the mirror case and go through rillsoft_task_role_assignment_derive; setting a single machine kind by hand goes through rillsoft_task_machine_role_assignment_set. One undo step. Tasks without concrete assignments appear with the cause in skipped[].
| Name | Required | Description | Default |
|---|---|---|---|
| taskUuids | No | UUIDs of the tasks; empty means every eligible task of the visible project or subproject |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | resource type |
| tasks | Yes | the tasks that were changed |
| skipped | Yes | skipped tasks with the cause |
| processed | Yes | number of tasks processed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true, but the description adds what the annotations cannot: existing machine role assignments are replaced, quantity and volume are recomputed, it costs one undo step, and skipped tasks are reported with a cause. That is concrete disclosure of what gets destroyed and what the run produces.
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?
Front-loads the transformation, then alternatives, then caveats (undo step, skipped tasks) in a dense, information-rich paragraph. Every sentence earns its place, though the flow is slightly packed for a single block.
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 an output schema present and destructive/idempotent annotations supplied, the description still fills the remaining gaps: replacement semantics, undo cost, and error handling via skipped[]. Nothing an agent needs to invoke 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?
Schema description coverage is 100% and the single parameter's meaning (empty = every eligible task of the visible project/subproject) is already documented there. The description reinforces scope indirectly via the skipped[] note but adds no syntax or format detail beyond the schema, so the 3 baseline 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 (derive/rebuild) and resource (machine role assignments of each task), and explains the transformation precisely: rebuild role assignments from concrete machine assignments, with quantity/volume derived from those machines. It is immediately distinguishable from the sibling set/derive tools, which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to alternatives with conditions: people are handled by rillsoft_task_role_assignment_derive, and setting a single machine kind by hand goes through rillsoft_task_machine_role_assignment_set. This covers when to use this tool versus the two nearest competitors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_machine_role_assignment_setAssign machine roleAIdempotent
Assigns a machine role from the existing master data to a task, or removes it again with quantity 0. The twin of rillsoft_task_role_assignment_set for the machine park; one undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| quantity | Yes | how many machines of this machine role; 0 removes the assignment | |
| taskUuid | Yes | UUID of the task | |
| utilization | No | utilization greater than 0 up to 1 (defaults to 1) | |
| machineRoleId | Yes | id of the machine role from rillsoft_resource_pool_catalog_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| machineRoleAssignments | Yes | the assignments of the task after the change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive. The description adds that it's 'one undo step', which usefully signals undo granularity. However it doesn't mention what happens to a conflicting assignment, how re-assignment on the same task behaves, or the utilization semantics beyond what the schema says.
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 tightly written sentences front-load the action, then add scope and sibling context. 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?
An output schema exists so return values need no explanation, and annotations cover the mutation profile. The description includes the master-data source (rillsoft_resource_pool_catalog_list) and undo behavior, though it doesn't clarify the machineRoleId provenance explicitly in the text (schema does). Adequate but one could want more on assignment conflicts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and all four parameters are documented in the schema, including quantity=0 removal and utilization bounds. The description only reinforces quantity=0, adding no format or semantics beyond the schema, so the 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?
States a specific verb (assigns/removes) and resource (machine role to a task), including the removal edge case (quantity 0). It also explicitly names its sibling rillsoft_task_role_assignment_set as the 'twin' for a different domain, which lets the agent distinguish them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the when (assigning a machine role from master data) and the removal condition (quantity 0), and points to the task_role sibling for contrast. It doesn't explicitly state when to use this versus rillsoft_task_machine_assignment_set or rillsoft_task_machine_role_assignment_derive, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_material_assignment_setAssign materialAIdempotent
Assigns material from the existing master data to a task, or removes that assignment with quantity 0. Material carries neither utilization nor capacity: it moves no dates but feeds the cost through quantity and calculation mode. Calling it again changes the existing assignment. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | remark on this assignment | |
| quantity | Yes | quantity in the metric of the material (> 0); 0 removes the assignment | |
| taskUuid | Yes | UUID of the task | |
| materialId | Yes | id of the material from rillsoft_resource_pool_catalog_list | |
| calculationMode | No | calculation mode: fixed, duration, effort, deliverable (defaults to fixed). It says how 'quantity' becomes the consumption: fixed = quantity, duration = duration[h] * quantity, effort = effort[h] * quantity, deliverable = output quantity * quantity |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| note | No | hint on the effect of the calculation mode; only when one applies |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| materialAssignments | Yes | the material assignments of the task after the change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, destructive=false. The description adds context beyond them: repeat calls modify the existing assignment, the operation is reversible with 'One undo step', and it affects cost but not scheduling dates. Permission/authentication requirements are still unstated, 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?
Four short sentences, front-loaded with the core action and its inverse. Slight overhead in retelling the calculation mode's cost role, but each sentence conveys usable information 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 full schema coverage, an output schema, and annotations covering the safety profile, the remaining burden is the behavioral quirks — upsert semantics, undo reversibility, cost-not-schedule effect — all of which are covered. Nothing an agent needs to call this 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?
Schema description coverage is 100%, so the schema already explains quantity (metric, 0 removes), materialId provenance, and the calculationMode enum in detail. The description only restates the quantity-0 removal, adding no format or constraint detail beyond the schema — the correct baseline of 3 when structured fields do the work.
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?
Names a specific verb and resource ('Assigns material ... to a task') and states the reverse operation (quantity 0 removes). It implicitly distinguishes itself from the sibling assignment tools (task_employee_assignment_set, task_machine_assignment_set) by specifying that the assignee is material from master data.
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 a strong selection signal by contrast: material 'carries neither utilization nor capacity: it moves no dates but feeds the cost,' which tells the agent to pick this over date-driving resource assignments. It also notes that calling it again changes the existing assignment (upsert). It does not name the sibling tools explicitly as alternatives, so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_progress_recalculateRecompute progressAIdempotent
Derives the actual progress of every task from the current status date, computed by RP. It writes progress, not dates - moving unfinished work goes through rillsoft_project_status_date_reschedule, and a single task by hand through rillsoft_task_progress_set. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| statusDate | Yes | status date of the project, DD.MM.YYYY hh:mm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the write-but-safe profile is covered. The description adds genuinely new behavioral context: it writes progress values rather than dates, and it is a single undo step. It does not state permission requirements or whether progress values can be overwritten non-idempotently, keeping it short of 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?
Three dense sentences, front-loaded with the core action before the routing guidance. Every clause conveys distinct information - scope, what is written, where to go instead, and undo cost - 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?
An output schema exists, so return values need not be described, and annotations cover the safety profile. For a zero-parameter bulk operation, the description supplies the scope, the two alternatives, and the undo consequence, which is everything an agent needs to invoke 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?
The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to clarify. The note that the computation is driven by 'the current status date' implicitly identifies the external input, adding a small amount of value.
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?
Specific verb ('Derives the actual progress of every task') plus the scope qualifier ('from the current status date, computed by RP') makes the action and its breadth unambiguous. An agent can distinguish it from the single-task and date-moving siblings without opening any 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?
Explicitly routes the agent: moving unfinished work goes through rillsoft_project_status_date_reschedule, and adjusting one task by hand goes through rillsoft_task_progress_set. This is a clear when-to-use-this-vs-alternatives statement naming the exact sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_progress_setSet progressAIdempotent
Sets the actual progress of a task (0 to 100 %). It sets one task by hand; deriving the progress of every task from the status date goes through rillsoft_task_progress_recalculate, and the planning data of the task itself through rillsoft_task_update. The value is passed along to predecessors and successors. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the task | |
| progressPercent | Yes | actual progress in percent (0 to 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| effortHours | Yes | effort in hours |
| effortDoneHours | Yes | completed effort in hours |
| progressPercent | Yes | actual progress in percent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present, the description still earns credit by disclosing two non-obvious traits: the value propagates to predecessors and successors, and the operation is a single undo step. It doesn't mention permissions or what happens to downstream scheduling beyond propagation, so it's strong but not complete.
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, zero filler, with the core action first and alternatives and side effects following in priority order. 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?
An output schema exists so return values needn't be explained, and the description covers scope, alternatives, side effects, and undo behavior. What's missing is only marginal (e.g., whether propagation failure rolls back the change).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters carry descriptions including min/max, so the schema carries parameter semantics. The description only restates the 0–100 % range already in the schema, adding no meaningful param nuance.
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 ('Sets the actual progress of a task') with an explicit range, and explicitly distinguishes itself from rillsoft_task_progress_recalculate (bulk derivation) and rillsoft_task_update (planning data). An agent can select it without opening any 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?
Explicit alternative routing: use this for setting one task by hand, use rillsoft_task_progress_recalculate for deriving progress from the status date, and use rillsoft_task_update for planning data. Both the when and the when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_resource_assignment_fillAssign resources automaticallyA
The 'Assign staff' respectively 'Assign machine park' wizard: fills many tasks at once out of their role assignments. One call is exactly one undo step, labelled like the menu entry. An assignment is made only where the task carries the matching role, the resource is not on it yet, it is not already involved through another role, and the balance of that role is still open. The result gives the assignments made per task plus skipped[] with the cause. Only at progress 0 %.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | automatic (the default) applies the rule behind the 'Select all' button (balance still open, no schedule conflict, and for people 100 % availability on top); selection takes only the pairs given in assignments | automatic |
| type | No | resource type; employee by default. Here resource covers exactly these two - an assistant works on concrete people and machines. The other four resource types (role, team, material, machine_role) are read and written through rillsoft_resource_usage_list and rillsoft_resource_usage_set | employee |
| taskUuids | No | UUIDs of the tasks; empty means every eligible task of the visible project or subproject, just like the menu entry | |
| assignments | No | only with mode selection: an array of { taskUuid, resourceId } | |
| resourceIds | No | preselection like the first wizard page; empty means every resource whose role the tasks call for |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | operating mode chosen |
| type | Yes | resource type |
| tasks | Yes | the tasks that were changed |
| skipped | Yes | skipped tasks with the cause |
| assigned | Yes | number of assignments made |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations (which only say non-read-only, non-idempotent, non-destructive): each call is exactly one undo step, the precise conditions under which an assignment is made, and the 0% progress constraint. It also describes the failure reporting (skipped[] with cause).
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?
Dense but front-loaded: the batch-wizard purpose leads, followed by undo semantics and the assignment conditions. Sentences are telegram-style and a bit run-on in the rules list, but nearly every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent mutation with an available output schema, the description covers preconditions, undo behavior, and result shape (per-task assignments plus skipped[]). It is nearly complete; the only minor gap is not explicitly pointing to sibling tools for the non-zero-progress case.
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 mode, type, taskUuids, assignments, and resourceIds. The description adds no syntax or format detail for these parameters beyond what the schema provides, making the baseline 3 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?
States a specific verb and resource with scope: it 'fills many tasks at once out of their role assignments,' framing it as a batch wizard. This distinguishes it from single-assignment siblings like rillsoft_task_employee_assignment_set and rillsoft_task_role_assignment_set. An agent can tell it apart 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 a clear precondition ('Only at progress 0 %') and frames usage via the 'Assign staff'/'Assign machine park' wizard and the 'Select all' menu equivalent. It does not explicitly name alternative tools for assigning resources when this precondition fails, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_resource_assignment_removeTake resources off tasksADestructiveIdempotent
The 'Remove staff' respectively 'Remove machine park' wizard: takes the named resources out of many tasks at once - one undo step. A task already begun is split at its progress first, and the completed part keeps its assignment. Completed tasks stay untouched and appear with the cause in skipped[].
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | resource type; employee by default. Here resource covers exactly these two - an assistant works on concrete people and machines. The other four resource types (role, team, material, machine_role) are read and written through rillsoft_resource_usage_list and rillsoft_resource_usage_set | employee |
| taskUuids | No | UUIDs of the tasks; empty means every eligible task of the visible project or subproject | |
| resourceIds | Yes | ids of the resources to take out; at least one |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | resource type |
| tasks | Yes | the tasks that were changed |
| skipped | Yes | skipped tasks with the cause |
| processed | Yes | number of tasks processed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructive=true, idempotent=true), and the description adds meaningful behavior beyond them: tasks already begun are split at their progress, the completed portion keeps its assignment, and completed tasks are left untouched but reported with a cause in skipped[]. This is substantial operational detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the wizard identity and batch behavior, then the split/skip semantics. Every clause carries information and nothing is padded.
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 an output schema present, return values need not be explained, and the description still covers scope, the split-at-progress rule, and the skipped[] reporting. Combined with the destructive/idempotent annotations, an agent has everything needed 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% and the type enum, empty taskUuids semantics, and resourceIds constraints are all documented in the schema. The description adds no new parameter-level syntax or format detail, so it matches the baseline-3 expectation when the schema does the heavy lifting.
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 ('takes the named resources out of many tasks at once') and frames it as the 'Remove staff'/'Remove machine park' wizard. The batch scope plus the resource/task pairing clearly distinguishes it from the per-task set/fill siblings.
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 clear context for use: a bulk removal across many tasks, executed as 'one undo step'. It does not, however, name an alternative or state when a per-task tool would be preferable, so it falls short of the explicit when/when-not bar for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_resource_candidate_listList candidatesARead-onlyIdempotent
Reports per task the roles attached to it (quantity, assigned, balance, balanceOpen) and the candidates matching them - the same set the task dialog shows after the role and team filter. Per candidate: id, name, code, teamId, free (free capacity within the task period), cost, alreadyAssigned, scheduleConflict and reason where it cannot be assigned; with type employee also availability and efficiency. Read-only, no undo step. Filling the slots afterwards goes through rillsoft_task_employee_assignment_set, rillsoft_task_machine_assignment_set or rillsoft_task_resource_assignment_fill.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | resource type; employee by default. Here resource covers exactly these two - an assistant works on concrete people and machines. The other four resource types (role, team, material, machine_role) are read and written through rillsoft_resource_usage_list and rillsoft_resource_usage_set | employee |
| roleIds | No | ids of the roles or machine roles to filter on; empty means every one attached to the task. On opening, the task dialog ticks the first role only - to reproduce exactly its list, pass that id explicitly | |
| taskUuid | No | UUID of one task; taskUuids is the alternative | |
| taskUuids | No | UUIDs of several tasks; leave both empty for every task of the visible project or subproject | |
| searchText | No | filter by name, like the search field of the dialog | |
| teamFilter | No | narrow further to the team of the task or of its subproject; omit it to get the preset of the dialog (on as soon as a team is carried) | |
| matchingOnly | No | true (the default) = only resources that carry one of the roles; false = the unfiltered master data, as with the role tick cleared |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | resource type |
| tasks | Yes | the tasks evaluated |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered; the description reinforces it with 'Read-only, no undo step.' Beyond that it discloses meaningful behavioral detail: what each candidate carries (free capacity within the task period, cost, alreadyAssigned, scheduleConflict and reason), and that employee-type candidates additionally carry availability and efficiency. That is real added context, though it overlaps with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then structured detail on the returned fields, then the routing sentence to the assignment tools. The 'Read-only, no undo step' clause slightly duplicates the annotations, but overall every sentence carries content and nothing is padding.
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 read-only list tool with 7 optional params, a rich input schema and an output schema, the description covers purpose, default/dialog semantics, candidate field meanings, and the follow-up write path. An agent has everything it needs to select and 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 each of the 7 parameters is already documented, including the default-preset behavior of roleIds, teamFilter and matchingOnly. The description adds only a holistic framing - that the result reproduces the dialog's filtered candidate list - rather than per-parameter semantics. Baseline 3 is correct when the schema does the heavy lifting.
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 - it reports, per task, the roles attached and the candidate resources matching them - and pins the scope to the exact set the task dialog shows after the role/team filter. It is immediately distinguishable from siblings like rillsoft_task_role_assignment_derive and the assignment_set family, which it names.
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 context is clear: this is the read/list side, and filling the slots afterwards goes through rillsoft_task_employee_assignment_set, rillsoft_task_machine_assignment_set or rillsoft_task_resource_assignment_fill. That routes the agent to the correct follow-up tools. It does not explicitly state when NOT to use it or contrast with the other list-style siblings (e.g. resource_usage_list), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_role_assignment_deriveDerive roles from assignmentsADestructiveIdempotent
The 'Derive roles from the assignment' wizard: rebuilds the role assignments of each task out of the concrete people assigned to it - existing role assignments are replaced, quantity and volume are formed from those people. Reports them under assignments[]. Machine kinds are the mirror case and go through rillsoft_task_machine_role_assignment_derive; setting a single role by hand goes through rillsoft_task_role_assignment_set. One undo step. Tasks without concrete assignments appear with the cause in skipped[].
| Name | Required | Description | Default |
|---|---|---|---|
| taskUuids | No | UUIDs of the tasks; empty means every eligible task of the visible project or subproject |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | resource type |
| tasks | Yes | the tasks that were changed |
| skipped | Yes | skipped tasks with the cause |
| processed | Yes | number of tasks processed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false. The description adds context beyond annotations: existing role assignments are replaced, quantity/volume are derived, one undo step, and skipped tasks are reported with cause. That is meaningful behavioral disclosure (what is destroyed, undo availability, failure reporting). It doesn't explicitly restate reversibility caveats but the 'One undo step' line covers it well.
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 zero waste; scope and replacement semantics are front-loaded, sibling routing follows, and the skipped[] reporting detail closes it out. 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 mutating tool with one optional param, output schema present, and annotations covering safety, the description supplies the remaining pieces: replacement semantics, derivation source, undo availability, and skipped-task reporting. Nothing an agent needs 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?
Schema coverage is 100% and the schema description already explains that empty taskUuids means every eligible task of the visible project/subproject. The description doesn't add syntax or format details beyond that. 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?
States a specific verb ('rebuilds the role assignments of each task') and resource ('concrete people assigned to it'), and names the sibling tools this is not (rillsoft_task_machine_role_assignment_derive, rillsoft_task_role_assignment_set). An agent can distinguish it from all siblings without opening any 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?
Explicitly names two alternatives and the condition that selects each: machine kinds go to rillsoft_task_machine_role_assignment_derive, single-role manual setting goes to rillsoft_task_role_assignment_set. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_role_assignment_setAssign roleAIdempotent
Assigns a role (a professional qualification) from the existing pool to a task, or removes it again with quantity 0. A role is the requirement, not the person: filling it with someone concrete goes through rillsoft_task_employee_assignment_set, and rillsoft_task_role_assignment_derive works the other way round and rebuilds roles out of the people already assigned. Machine kinds are the mirror case (rillsoft_task_machine_role_assignment_set). One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| roleId | Yes | id of the qualification from rillsoft_resource_pool_catalog_list with types:["role"] | |
| quantity | Yes | how many people of this role; 0 removes the assignment | |
| taskUuid | Yes | UUID of the task | |
| utilization | No | utilization greater than 0 up to 1 (defaults to 1) |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
| assignments | Yes | the assignments of the task after the change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, idempotent, non-destructive. The description adds genuinely useful behavioral context beyond them: setting quantity 0 removes the assignment, and the operation consumes exactly 'one undo step', which matters for an agent planning revertible actions.
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?
Dense but front-loaded: the core action and its inverse come first, then the disambiguation of siblings. Every sentence carries routing or behavioral information, though the sibling enumeration is tight enough to avoid bloat.
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 an output schema present, return values need not be explained, and annotations cover the safety profile. The description supplies the role-vs-person conceptual model, the inverse operation, and the undo-step cost, leaving little an agent needs that 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?
Schema coverage is 100%, so the schema already documents roleId, quantity, taskUuid and utilization. The description reinforces that quantity 0 removes the assignment (already in the schema) and clarifies the roleId source is a professional qualification from the existing pool, adding only marginal value over the structured 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 states a specific verb and resource (assign a role to a task) plus the inverse operation (remove with quantity 0), and explicitly distinguishes this tool from three named siblings: employee_assignment_set (filling with a person), role_assignment_derive (rebuilds roles from people), and machine_role_assignment_set.
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 describes exactly when to use this tool versus the alternatives, explaining the conceptual difference between a role (the requirement) and a person or machine, and pointing to the sibling for each case. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_splitSplit taskA
Splits a task. Give exactly one of splitTime, completedPart or proportions. Splitting into n parts is a single undo step. The result is parts[] carrying uuid, wbs, number, name, start, finish, durationHours and progressPercent in WBS order. Beware: every part keeps the UUID of the original task, which is what preserves the baseline reference. What is unique is the number; passed as number it addresses one part in rillsoft_task_update, rillsoft_task_split and rillsoft_task_split_options_get. The name stays the same for all parts as well (just as in the user interface); rename them one by one through rillsoft_task_update.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the task | |
| number | No | narrows an ambiguous UUID down to one part; required to split an already split task again | |
| sameRow | No | draw the parts on one display row (defaults to true); only together with proportions | |
| linkParts | No | create a finish_start dependency between the parts (defaults to true); only together with proportions | |
| splitTime | No | split point, DD.MM.YYYY hh:mm, and it has to lie inside the task; this covers both a starting shift and a conflict point | |
| proportions | No | split by criterion: { criterion: percent|deliverable|effort|duration|cost, values: [ ... ] }. The values are given in the metric of the criterion (rillsoft_task_split_options_get reports metric and totalValue); whatever remains is appended where it can carry a part | |
| completedPart | No | true = split at the point of progress; the only way permitted once times have been recorded |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | number of parts |
| parts | Yes | the parts in WBS order; all carry the UUID of the original task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false) by disclosing that a multi-part split is a single undo step, that every part retains the original UUID to preserve the baseline reference, that only 'number' is unique, and that names stay identical for all parts. These are exactly the non-obvious behaviors an agent needs and are consistent with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the required-argument constraint, then layers in behavioral caveats. Dense but every sentence carries distinct information (undo granularity, UUID preservation, naming). Slightly long, with the UUID/name explanation spanning multiple sentences that could be tightened.
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?
Output schema exists, so return-value explanation is not strictly required, yet the description still says the result is parts[] in WBS order. For a non-idempotent mutation with many interacting parameters, this is close to complete; only permission/authorization prerequisites are unaddressed.
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 baseline is 3. The description nevertheless adds cross-tool semantics the schema cannot convey: 'number' addresses one part across rillsoft_task_update, rillsoft_task_split and rillsoft_task_split_options_get, and explains why names must be renamed one by one. This is genuinely beyond the property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Splits a task' gives a specific verb and resource, then immediately constrains the operation with the exactly-one-of rule over splitTime, completedPart or proportions. It is distinguishable from siblings like rillsoft_task_update (rename) and rillsoft_task_split_options_get (options) without opening any 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?
States the mutual-exclusion constraint ('Give exactly one of...') and a hard pre-condition ('completedPart ... the only way permitted once times have been recorded'). It also routes the agent to rillsoft_task_update for renaming and rillsoft_task_split_options_get for options. No explicit when-not-to-use this tool at all, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_split_options_getRead split optionsARead-onlyIdempotent
Enumerates the ways a task can be split: completedPart (the point of progress), shiftStarts[] (starting shifts from the quantity profile), conflicts[] (start times of colliding tasks together with resourceType), criteria[] (criterion, metric, totalValue for proportions), plus splittable and timeSheet. Read-only, no undo step. Every point of time it reports can be passed straight to rillsoft_task_split.splitTime without conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the task | |
| number | No | narrows an ambiguous UUID down to one part (see rillsoft_task_split) | |
| resourceType | No | narrows the conflict points down to one resource type |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | name of the task |
| uuid | Yes | UUID of the task |
| reason | No | why splitting is impossible; only with splittable:false |
| criteria | Yes | criteria for 'proportions' |
| conflicts | Yes | start times of colliding tasks |
| timeSheet | Yes | true = recorded times are attached to the task |
| splittable | Yes | true = at least one way to split is possible |
| shiftStarts | Yes | starting shifts from the quantity profile |
| completedPart | No | split at the point of progress; missing without usable progress |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; 'read-only, no undo step' largely restates it. The genuine additions are the enumerated return fields and the guarantee that every reported point of time can be handed to splitTime without conversion, which is real behavioral value beyond the structured fields.
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?
Front-loads the core verb and then enumerates the returned fields compactly. The field list is dense but each entry maps to actual output, and the two trailing sentences earn their place; 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 an output schema present, return details are supplementary, and the description still covers the integration path to rillsoft_task_split plus the safety note. Nothing critical for correct invocation is missing, though it doesn't address ambiguity handling of uuid versus number.
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 uuid, number and resourceType are already fully documented with an enum. The description contributes no parameter-level meaning (e.g., how number disambiguates, when to set resourceType), 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 (enumerates) and resource (the ways a task can be split), then itemizes the concrete fields it returns. It also names the sibling rillsoft_task_split and explains the relationship, so an agent can distinguish this read-only options tool from the mutating split tool without inspecting either 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?
Clearly frames the workflow: get the options here, then pass the reported time points straight to rillsoft_task_split.splitTime. That gives strong context for when to call it, though it offers no explicit exclusions or prerequisites (e.g., required task state).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_task_updateUpdate taskAIdempotent
Changes the planning data of a task: name, dates, duration, notes, fixing, display row, task kind and the dynamic redistribution of the personnel effort. It changes the task itself - moving it in the structure goes through rillsoft_element_move, its progress through rillsoft_task_progress_set, its assignments through the rillsoft_task_*_assignment_set family, and a subproject through rillsoft_subproject_update. One undo step; conflicts are rolled back for you.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | code of the task, the free text field of the task dialog; an empty string clears it. RP does not check it for uniqueness | |
| name | No | new name | |
| uuid | Yes | UUID of the task | |
| fixed | No | fix the start date | |
| notes | No | new notes | |
| start | No | new start, DD.MM.YYYY hh:mm | |
| finish | No | new finish, DD.MM.YYYY hh:mm | |
| number | No | narrows an ambiguous UUID down to one part. After a rillsoft_task_split all parts carry the same UUID (they keep the baseline reference); the number from rillsoft_project_tree_get is unique per part | |
| sameRow | No | true = draw on one display row together with the WBS predecessor, false = a row of its own (the 'Show on one row' switch of the task dialog) | |
| fixedType | No | task type: duration, effort, duration_effort (defaults to the application default from the settings). It says which quantity RP holds fixed while computing: duration keeps the duration, effort keeps the effort, duration_effort keeps both. This matches the choice in the task dialog | |
| calendarId | No | calendar of this task, an id from rillsoft_calendar_list; 0 = none of its own, the calendar of the enclosing subproject or project applies. An id that does not exist is refused with unknown_id | |
| durationHours | No | new duration in hours (0 = milestone) | |
| dynamicRedistribution | No | spread the personnel effort of this task dynamically over the people of one qualification - the switch on the 'Personnel' tab of the task dialog. Three conditions decide whether it takes effect, and two of them make the call fail rather than promise something that never happens: scheduling has to be capacity_driven (with deadline_driven nothing redistributes at all, the same refusal as at the project), and the project must not carry the switch itself (while it does, it wins, and the task dialog locks its box the same way - switch it off through rillsoft_project_update first). The third one is not an error: without named people on the task - a role alone is not enough - the switch stays without effect. Read both sides back through rillsoft_project_tree_get: dynamicRedistribution is this switch, dynamicRedistributionEffective is what the scheduling really applies. Switching it off puts the distribution back to static |
Output Schema
| Name | Required | Description |
|---|---|---|
| wbs | Yes | WBS code |
| name | Yes | name |
| uuid | Yes | UUID of the element |
| start | Yes | start, DD.MM.YYYY hh:mm |
| finish | Yes | finish, DD.MM.YYYY hh:mm |
| number | Yes | number of the element; unique even for split tasks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=false), so safety is covered by structured data. The description adds genuine behavioral context beyond that: 'One undo step; conflicts are rolled back for you' discloses atomicity/rollback semantics, and the dynamicRedistribution note spells out that two precondition failures hard-fail the call while a missing named person silently no-ops. However, no permission/auth requirements or partial-update semantics (what happens to unspecified fields) are stated, so it is not fully load-bearing.
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?
Front-loaded with the verb and the field inventory, then routing, then transactional behavior; no filler sentences. It leans on long, dense compound sentences rather than shorter scannable ones, which costs a little readability but not substance.
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?
Output schema exists, so return values need not be described, and annotations cover the safety profile. Combined with a 13-parameter schema fully documented at 100%, the description still adds the two things an agent needs most: where this tool's responsibility ends (sibling routing) and how failure/rollback behaves.
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% and the per-parameter schema text is unusually rich (including the dynamicRedistribution precondition chain and fixedType enum semantics), so the schema does the heavy lifting. The description only re-lists the affected field names rather than adding syntax, format or interaction details beyond the schema, which matches the baseline-3 rule for high 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?
Opens with a specific verb+resource ('Changes the planning data of a task') and enumerates exactly which fields it owns: name, dates, duration, notes, fixing, display row, task kind, dynamic redistribution. It explicitly carves out the sibling surfaces it does NOT touch (element_move, task_progress_set, the *_assignment_set family, subproject_update), so an agent can separate it from adjacent update tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing rules: structural moves go to rillsoft_element_move, progress to rillsoft_task_progress_set, assignments to the rillsoft_task_*_assignment_set family, subproject changes to rillsoft_subproject_update. This is a when-not-to-use-this-here map naming the exact alternatives, which is the strongest form of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_timescale_applyApply time scaleAIdempotent
Applies the time scale of the time axis - either through level or through unit plus subdivision. A pure display property: tasks, dates, assignments, calendars and baselines stay untouched. One undo step; a level already set creates none.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | time unit of the time axis; level is the alternative | |
| level | No | level of the time axis (0 = year, up to the finest level); unit is the alternative | |
| subdivision | No | subdivision of the time unit, 1 to 3 (defaults to 1); year has none |
Output Schema
| Name | Required | Description |
|---|---|---|
| unit | No | time unit of the time axis; missing on a level without a named unit |
| label | Yes | caption from the user interface, never usable as a key |
| level | Yes | level of the time axis |
| subdivision | No | subdivision of the time unit; missing where there is none |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains that despite readOnlyHint=false nothing in the project data is touched ('tasks, dates, assignments, calendars and baselines stay untouched'), and it discloses undo semantics including the edge case that re-applying an already-set level produces no undo step. This is exactly the behavioral context annotations cannot carry.
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 tight sentences: purpose first, then the non-destructive guarantee, then undo behavior. No filler, and the most decision-relevant fact (pure display property) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and annotations plus the description together cover safety, idempotency and undo. Nothing needed to invoke the tool 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?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by framing level and unit+subdivision as alternative ways to set the same property and by tying subdivision to unit, which the schema only encodes structurally via oneOf/dependentRequired.
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 ('Applies') and resource ('the time scale of the time axis'), and clarifies it is a display property. It does not name any sibling tool, but the resource is distinct enough (vs outline_apply, row_selection_apply, view_state_apply) that an agent can route to it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two invocation modes (level, or unit plus subdivision) but never states when to prefer one over the other or when not to use the tool. 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.
rillsoft_variance_report_getRead variance reportARead-onlyIdempotent
Reads the visible variance view (time_variance, effort_variance or cost_variance) as a flat YAML report: per element the planned value from the active baseline, the actual value from the current computed state, and the variance between them. The scope is that one visible view, not the whole project - rillsoft_view_state_apply switches it, and rillsoft_baseline_select decides which baseline the comparison uses. It takes no parameters. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| yaml | Yes | the variance report as YAML, the same text as in content[0].text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, but the description adds real value: the scope is explicitly limited to one visible view rather than the whole project, and it discloses that there is no undo step and no parameters. It still does not describe pagination, size limits, or empty/missing-variance behavior.
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 sentences, front-loaded with the action and return shape, then scope, then the no-parameter/no-undo facts. The middle sentence is dense with two cross-references but each clause earns its place; nothing is wasted.
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 an output schema present, return format need not be re-specified, yet the description still summarises the YAML report shape. For a parameterless read tool, scope, dependencies, and mutation risk are all covered, so an agent has everything needed to invoke 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?
The tool takes zero parameters, and the description explicitly confirms 'It takes no parameters', so there is no ambiguity for the agent. That is the expected baseline-4 handling for a 0-param tool.
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 ('reads the visible variance view') and immediately enumerates the three view variants it can return, plus the per-element contents (planned, actual, variance). An agent can distinguish this from rillsoft_analysis_report_get or rillsoft_project_tree_get without opening a 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?
Clearly conditions usage on the currently visible view and names the two related tools that determine the output: rillsoft_view_state_apply to switch it and rillsoft_baseline_select to choose the baseline. It does not explicitly state when NOT to use this (e.g. for whole-project reporting), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_view_columns_applyApply columns of the viewARead-onlyIdempotent
Shows, hides, sizes and arranges columns of the list on the left of the visible view - the same effect as the context menu of the column header, dragging its edge and the column arrangement dialog. Give order, columns or both; a call with neither is rejected. Under columns only the columns named are touched, and a column that already stands as asked is left alone, so the call can be repeated. Rejected in plain words: an unknown column name, hiding a column the context menu greys out, a width on a column that stays hidden ({ visible: true, width: X } in one entry shows it and sizes it in one go), and an order that leaves a column out or names one twice. The list at the bottom of a view with a second chart is not addressable. No undo step and no change to the plan itself - no task, no assignment, no date moves; that is why this tool counts as read-only. What it does change is the way the project is displayed: the column state is stored with the project, and going through the user interface marks the document as changed, so a later save writes it along. It answers like rillsoft_view_columns_get.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | display order of the columns from left to right: the contract names of ALL columns of the view, each exactly once - the same array rillsoft_view_columns_get reports under order. This arranges the column headers; it does not sort the rows, and it does not show or hide anything - a hidden column keeps its place in the list and takes it up once it is shown. A list that leaves a column out or names one twice is rejected, never completed | |
| columns | No | the columns to change - every column left out stays as it is. Each entry needs name and at least one of visible and width |
Output Schema
| Name | Required | Description |
|---|---|---|
| view | Yes | name of the visible view the columns belong to |
| order | Yes | contract names of all columns from left to right - the arrangement of the column headers, not a sorting of the rows. Same sequence as columns[]; pass it back to rillsoft_view_columns_apply to restore the arrangement |
| columns | Yes | every column of the list in display order, hidden ones included |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains why readOnlyHint is true (no task, assignment or date moves, no undo step) while disclosing the non-obvious side effect that column state is persisted with the project and marks the document changed so a later save writes it. It also notes the second-chart bottom list is not addressable, and that the call is idempotent/repeatable.
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?
Dense but front-loaded: the effect is stated first, then the calling contract, then rejections, then behavioural notes. Some rejection detail overlaps the schema, but nearly every sentence carries information an agent needs to avoid an invalid call.
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?
An output schema exists so return values need not be described, and the description still notes the answer shape matches rillsoft_view_columns_get. Between the description, annotations and full schema coverage, an agent has everything needed to invoke this 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 baseline is 3, but the description adds cross-cutting semantics: order does not sort rows or change visibility, hidden columns keep their place, and showing plus sizing in one entry is allowed while hiding plus width is contradictory. This meaningfully clarifies how the two parameters interact.
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 precise verb set and resource: shows, hides, sizes and arranges columns of the visible view's left-hand list, and equates the effect to the column header context menu and drag behaviour. It is clearly distinct from rillsoft_view_columns_get, which it explicitly references as the reporting counterpart.
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 spells out the calling contract (give order, columns, or both; neither is rejected) and enumerates rejected inputs in plain words. It also implies the read-first workflow by pointing at rillsoft_view_columns_get, but never states when to prefer this tool over sibling view tools such as rillsoft_view_state_apply or rillsoft_window_layout_apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_view_columns_getRead columns of the viewARead-onlyIdempotent
Reads the columns of the list on the left of the visible view - the Gantt chart, the three variance views and the resource and capacity views carry one. Per column it gives name (the contract name), caption (the heading in the language of the running program), visible, width in neutral units and toggleable, in display order and hidden columns included. The field order repeats that display order as a plain list of names, ready to be passed back to rillsoft_view_columns_apply. In the network diagram and the bar network diagram there is no such list and the call fails, pointing at rillsoft_view_state_apply. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| view | Yes | name of the visible view the columns belong to |
| order | Yes | contract names of all columns from left to right - the arrangement of the column headers, not a sorting of the rows. Same sequence as columns[]; pass it back to rillsoft_view_columns_apply to restore the arrangement |
| columns | Yes | every column of the list in display order, hidden ones included |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/destructive, yet the description still adds real behavioral context: the per-column payload shape (name, caption, visible, width, toggleable), that hidden columns are included, the ordering guarantee, and the specific failure mode with its redirection. The 'Read-only, no undo step' line reinforces rather than contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action ('Reads the columns of the list...') before the enumeration and the exception. It is dense and slightly long, but each clause carries a distinct fact (view coverage, column fields, ordering handoff, failure case) 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?
For a zero-parameter read tool with an output schema and full annotation coverage, the description covers scope, payload semantics, ordering, failure modes, and the apply handoff. An agent has everything needed to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the rubric baseline is 4. The description's detailed account of the returned field structure adds meaning about the result payload but nothing parameter-related is required.
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 precise verb and resource ('Reads the columns of the list on the left of the visible view') and enumerates exactly which view types carry such a list (Gantt, variance, resource/capacity) versus those that do not. An agent can distinguish it from rillsoft_view_columns_apply and the state/view siblings without opening any 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 failure condition ('in the network diagram and the bar network diagram there is no such list and the call fails') and routes the agent to the alternative tool (rillsoft_view_state_apply). It also implies the downstream pairing with rillsoft_view_columns_apply. It stops short of stating when to prefer this over rillsoft_view_state_get, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_view_favorite_createCreate favourite viewA
Saves the visible view as a favourite view under 'name': view type, grouping, filter, time window, column layout and time scale as they are right now - rillsoft_view_state_apply and rillsoft_view_columns_apply shape it beforehand. The visible view stays as it is; switching to the favourite goes through rillsoft_view_favorite_select, removing it through rillsoft_view_favorite_delete. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the new favourite view; must not be empty and must not exist yet |
Output Schema
| Name | Required | Description |
|---|---|---|
| current | No | name of the favourite view currently visible; null while a regular view is visible |
| storage | Yes | where the favourites live: in the project file, or per user or per client on the Integration Server |
| favorites | Yes | all favourite views of the project in menu order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is partly covered. The description adds genuinely new context: the visible view is left untouched and the operation costs 'One undo step', which tells the agent the action is reversible via rillsoft_history_undo. It stops short of describing duplicate-name failure behavior or the response, so a 4 rather than 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?
The core action and captured state are front-loaded in the first clause, and the related-tool routing that follows is useful rather than filler. The single em-dash-chained sentence runs long and mixes action, precondition and cross-references, costing a point on structure.
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 one-parameter create tool with an output schema, the description covers what is captured, the non-destructive effect on the current view, the undo cost and the sibling tools for the follow-up actions. Nothing an agent needs to invoke 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?
Schema description coverage is 100% and the single 'name' parameter is already documented including the 'must not be empty and must not exist yet' constraint, so the schema carries the burden. The description only restates that the state is stored 'under name', adding no format or naming-convention detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Saves the visible view as a favourite view under name') and enumerates exactly what state is captured: view type, grouping, filter, time window, column layout, time scale. It is plainly distinguishable from the sibling favourite_select/delete/list 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?
Gives explicit routing: shape the view beforehand with rillsoft_view_state_apply and rillsoft_view_columns_apply, switch to a favourite via rillsoft_view_favorite_select, remove it via rillsoft_view_favorite_delete. The conditions that select each alternative are named, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_view_favorite_deleteDelete favourite viewADestructive
Deletes the favourite view 'name' from the project. The favourite view that is visible right now cannot be deleted - switch to another view with rillsoft_view_state_apply first; any other favourite can go while it stays visible. Only the saved view goes; the project keeps its planning data untouched. Listing what exists goes through rillsoft_view_favorite_list. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the favourite view from rillsoft_view_favorite_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| current | No | name of the favourite view currently visible; null while a regular view is visible |
| storage | Yes | where the favourites live: in the project file, or per user or per client on the Integration Server |
| favorites | Yes | all favourite views of the project in menu order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds real information beyond them: deletion is limited to the saved view while planning data is untouched, and the operation is reversible via 'One undo step.' It still doesn't say what the response contains or whether it errors when the name is unknown.
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?
Five short sentences, front-loaded with the action and the blocking constraint, then scope, alternative tool, and undo behavior. No filler or restated purpose.
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 single-parameter destructive delete with an output schema available, the description covers the prerequisites, the side-effect boundary, and reversibility. Nothing an agent needs to call it safely 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?
Only one parameter with 100% schema coverage, and the schema description already states it is the name from rillsoft_view_favorite_list. The description repeats that sourcing hint without adding format, casing, or matching semantics, 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?
Opens with a specific verb+resource ('Deletes the favourite view') and immediately scopes it to the 'name' in the current project. It is trivially distinguishable from rillsoft_view_favorite_list (enumeration) and rillsoft_view_favorite_create, both of which it names or implies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the one condition that blocks use (the currently visible favourite view), gives the concrete remedy (switch via rillsoft_view_state_apply), and clarifies that any other favourite is fair game even while visible. It also routes the agent to rillsoft_view_favorite_list to discover valid names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_view_favorite_listList favourite viewsARead-onlyIdempotent
Reads the favourite views of the project (name and the view each one was saved from), where they are stored, and which one is visible right now. Switching to one goes through rillsoft_view_favorite_select. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| current | No | name of the favourite view currently visible; null while a regular view is visible |
| storage | Yes | where the favourites live: in the project file, or per user or per client on the Integration Server |
| favorites | Yes | all favourite views of the project in menu order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only, no undo step' largely restates structured data. The description does add some context by noting the visible-now state and the storage location of the entries, but adds no new safety, permission, or side-effect disclosure 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and returned fields, with the navigation hint second. The trailing 'Read-only, no undo step' is redundant against the annotations, which is the only wasted clause.
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 an output schema present, the description needn't detail return values, and it correctly focuses on scope and the sibling handoff for selection. Nothing essential is missing for a zero-parameter, read-only list tool, though it could note the create/delete counterparts.
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. The description appropriately does not invent parameter semantics and instead describes what the call surfaces.
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 (Reads) and resource (favourite views of the project) and enumerates the salient returned content: name, origin view, storage location, and which is currently visible. An agent can distinguish this from rillsoft_view_favorite_create/delete/select without opening a 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?
Explicitly routes the agent to rillsoft_view_favorite_select for the switching action, which is the main adjacent operation. It does not state when not to use the tool or cover the create/delete siblings, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_view_favorite_selectSelect favourite viewAIdempotent
Switches the visible view to the favourite view 'name', the same way as the favourites menu: afterwards rillsoft_view_state_get reports 'favorite' next to the underlying view name. It only changes what is shown, nothing in the project - and like every view switch it is no undo step. Creating and deleting favourites go through rillsoft_view_favorite_create and rillsoft_view_favorite_delete.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the favourite view from rillsoft_view_favorite_list |
Output Schema
| Name | Required | Description |
|---|---|---|
| current | No | name of the favourite view currently visible; null while a regular view is visible |
| storage | Yes | where the favourites live: in the project file, or per user or per client on the Integration Server |
| favorites | Yes | all favourite views of the project in menu order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: describes the side effect on rillsoft_view_state_get ('reports favorite next to the underlying view name'), clarifies it only changes display (not project data), and notes it is not an undo step. Annotations say readOnlyHint=false but the description clarifies this is a view-only, non-destructive switch, consistent with destructiveHint=false.
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 front-loading the action, followed by behavioral notes and sibling routing. 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 1-param switch tool with an output schema present, the description covers the visible effect, the state report, non-undoability, and sibling alternatives. Nothing an agent needs 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?
Schema coverage is 100% and the single parameter 'name' is fully described in the schema as 'name of the favourite view from rillsoft_view_favorite_list'. The description mentions 'name' but adds no syntax or format guidance beyond the schema baseline.
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 'Switches' and resource 'the visible view to the favourite view name', and explicitly distinguishes from sibling operations for creating/deleting favourites.
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?
Clear context: use to switch to a favourite, and names the create/delete siblings for other operations. However it does not state when to prefer rillsoft_view_state_apply or rillsoft_view_columns_apply over this tool, though those are adjacent concerns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_view_state_applyApply view stateAIdempotent
Switches the visible view ('view.name', for example gantt or employee) and sets its state - grouping, presentation, secondary view, time and task filter, time scale, application-wide switches - in the shape of the rillsoft_view_state_get answer: reading it and applying it back restores the state exactly. Informational fields (baseline, note, favorite) are ignored; rillsoft_baseline_select is what switches the baseline, and rillsoft_view_favorite_select is what switches to a favourite view. At least one section is required. One undo step.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | informational field of the answer, ignored here | |
| view | No | the view part in the shape of the rillsoft_view_state_get answer: name, grouping, display, secondaryView, secondaryChart, costCurve and the view options; everything but the cost curve together forms exactly one undo step | |
| baseline | No | informational field of the answer, ignored here; rillsoft_baseline_select is what switches the baseline | |
| timescale | No | { level } as in the answer; a step of its own, with the command semantics of rillsoft_timescale_apply | |
| taskFilter | No | the task filter in the shape of the answer; active:false clears it, the id lists are absolute - what is not named is deselected. Set on the view named under 'view' and part of that same undo step; a call that carries nothing but taskFilter is no undo step at all, just like the filter dialog | |
| timeFilter | No | { active, from, to }; active:false turns the filter off. Part of that same undo step | |
| application | No | application-wide visibilities including tooltips; persistent and outside undo, just like the ribbon switches |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | hint on the reach of the values under 'application' |
| view | Yes | the visible view and its view-bound options |
| baseline | Yes | selected baseline |
| timescale | Yes | time scale of the time axis |
| taskFilter | Yes | task filter of the view: resources, calendars and the three switches |
| timeFilter | Yes | time filter of the presentation |
| application | Yes | application-wide and persistent presentation switches |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing undo semantics: view + options form exactly one undo step, timescale is its own step, a taskFilter-only call is no undo step, and application switches are persistent and outside undo. It also states that informational fields (baseline, note, favorite) are ignored rather than applied. Annotations already cover idempotency and non-destructiveness, so this added undo/persistence detail is the real contribution.
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 dense paragraph that front-loads the action and scope before the caveats, and every clause (ignored fields, alternatives, undo granularity) carries information. It is long, but justified by the tool's 7 nested sections, so it stays readable rather than padded.
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 complex, deeply nested apply tool with an output schema present, it covers the essentials an agent needs: restorability from the get-answer shape, ignored fields, required minimum section, undo granularity, and where to go for baseline/favourite selection. Nothing critical to correct invocation 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?
Schema coverage is 100%, so the baseline expectation is a 3; the description still adds cross-parameter meaning the schema cannot convey, namely which answer fields are informational and ignored on write, that timescale carries rillsoft_timescale_apply semantics, and that taskFilter's id lists are absolute. Useful, but much of the per-field meaning still lives in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action pair ('switches the visible view ... and sets its state') plus the concrete scope (grouping, presentation, secondary view, filters, time scale, application switches). It explicitly distinguishes itself from rillsoft_view_state_get ('in the shape of the ... answer'), rillsoft_baseline_select and rillsoft_view_favorite_select, so an agent can place it among the view/state siblings 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 the operating pattern directly ('reading it and applying it back restores the state exactly'), the minimum precondition ('At least one section is required'), and routes two adjacent concerns to other tools: rillsoft_baseline_select for baselines and rillsoft_view_favorite_select for favourite views. That is explicit when-to-use plus named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_view_state_getRead view stateARead-onlyIdempotent
Reads the complete visible view state in one answer: 'view' (its name including the task views, grouping, presentation, secondary view together with secondary chart and cost curve; while a favourite view is visible also 'favorite' with its name next to the underlying view), 'timescale', 'timeFilter', 'taskFilter' and 'baseline'. Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | hint on the reach of the values under 'application' |
| view | Yes | the visible view and its view-bound options |
| baseline | Yes | selected baseline |
| timescale | Yes | time scale of the time axis |
| taskFilter | Yes | task filter of the view: resources, calendars and the three switches |
| timeFilter | Yes | time filter of the presentation |
| application | Yes | application-wide and persistent presentation switches |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is largely covered. The description still adds value by enumerating the exact state captured (grouping, presentation, secondary view/chart, cost curve, favourite view, baseline) and by noting 'no undo step', which clarifies that reading leaves no history entry.
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?
Front-loaded with the verb and the outcome, and it fits the essential payload description into a single sentence. The deeply nested parenthetical around 'view' makes it slightly harder to parse than it needs to be, but no sentence is wasted.
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?
An output schema exists, so return values need not be explained, yet the description usefully previews the returned keys. For a zero-argument, read-only getter this is essentially complete; the only missing item is an explicit pointer to the apply counterpart.
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 there is nothing for the description to disambiguate; baseline is 4 per the zero-parameter rule. The description correctly avoids restating an 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 ('Reads') and a specific resource ('the complete visible view state'), then enumerates the payload keys (view, timescale, timeFilter, taskFilter, baseline) so the agent knows exactly what is returned. It does not name its obvious counterpart rillsoft_view_state_apply, so sibling disambiguation 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?
Usage is implied by 'Reads the complete visible view state in one answer' — an agent can infer this is the read side of view state. However, there is no explicit when-to-use statement, no mention of the apply counterpart, and no stated preconditions (e.g. a project must be open).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_window_layout_applyApply window layoutARead-onlyIdempotent
Applies the window state for reproducible screenshots; at least one parameter is required, and sizes left out stay as they are. It answers like rillsoft_window_layout_get. No undo step, no change to the project. The state holds for the running session only.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | width of the visible client area in pixels; give it together with height | |
| height | No | height of the visible client area in pixels; give it together with width | |
| ribbon | No | state of the ribbon; minimized shows the tab row only | |
| infoPanel | No | show or hide the info window, the docking bar holding the property sheet | |
| statusBar | No | show or hide the status bar; among other things it shows the path of the resource pool file |
Output Schema
| Name | Required | Description |
|---|---|---|
| dpi | Yes | screen resolution in dpi |
| width | Yes | width of the visible area in pixels |
| height | Yes | height of the visible area in pixels |
| ribbon | Yes | state of the ribbon |
| infoPanel | Yes | info window visible |
| maximized | Yes | true = window maximized |
| statusBar | Yes | status bar visible |
| windowWidth | Yes | width of the window in pixels |
| windowHeight | Yes | height of the window in pixels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is largely covered. The description adds genuinely non-derivable behavior: partial application (omitted sizes stay as-is), no undo step, no project mutation, and session-only lifetime, which is exactly the kind of scope detail annotations cannot express.
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 action and purpose, then requirement, then behavioral caveats. Every clause carries information (requirement, partial update, return-shape reference, no undo, session scope) 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 an output schema present, return values need no explanation, and the description still points at rillsoft_window_layout_get for shape. Requirements, reversibility, and lifetime are all covered; only edge behavior (invalid values, whether a project must be open) is unaddressed.
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% and each field is documented, so the baseline is 3. The description adds the partial-update semantic — omitted values are left unchanged — which complements the schema's anyOf at-least-one constraint rather than merely restating it.
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 ("Applies the window state") and adds the motivating purpose, reproducible screenshots. It also names its sibling relationship ("answers like rillsoft_window_layout_get"), so an agent can separate the setter from the getter without opening either 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 a clear use case (reproducible screenshots) and a concrete prerequisite (at least one parameter required). It does not, however, say when not to use it or contrast it with adjacent layout-affecting tools such as rillsoft_view_state_apply or rillsoft_timescale_apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rillsoft_window_layout_getRead window layoutARead-onlyIdempotent
Reads the window state: width and height of the visible client area, windowWidth and windowHeight including the frame, dpi, maximized, infoPanel (the docking bar holding the property sheet), statusBar and ribbon (normal or minimized). Read-only, no undo step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| dpi | Yes | screen resolution in dpi |
| width | Yes | width of the visible area in pixels |
| height | Yes | height of the visible area in pixels |
| ribbon | Yes | state of the ribbon |
| infoPanel | Yes | info window visible |
| maximized | Yes | true = window maximized |
| statusBar | Yes | status bar visible |
| windowWidth | Yes | width of the window in pixels |
| windowHeight | Yes | height of the window in pixels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to carry the safety burden. It still adds useful context with 'no undo step' and field-level semantics like infoPanel being the docking bar holding the property sheet. It stops short of describing permission needs or side effects on the UI.
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?
Front-loaded with the action and resource, then a single packed sentence enumerating fields, closed by a brief safety note. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations and the presence of an output schema, the description is almost complete for a zero-parameter read tool. The only notable omission is routing guidance relative to rillsoft_window_layout_apply.
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 has zero parameters, so baseline is 4. The empty input schema is fully documented, and the description correctly focuses on returned state rather than inventing parameter semantics.
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 ('Reads') and resource ('window state'), and enumerates the returned fields. It does not explicitly differentiate from the sibling rillsoft_window_layout_apply, 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 read-only nature and 'get' naming imply use for inspecting layout state, but the description offers no explicit when-to-use guidance or named alternative such as the apply tool. Usage is inferable but not stated.
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.
118 tool updates
v10.0.626- First observed
rillsoft_analysis_option_list - First observed
rillsoft_analysis_report_get - First observed
rillsoft_baseline_create - First observed
rillsoft_baseline_delete - First observed
rillsoft_baseline_list - First observed
rillsoft_baseline_select - First observed
rillsoft_calendar_create - First observed
rillsoft_calendar_delete - First observed
rillsoft_calendar_list - First observed
rillsoft_calendar_source_get - First observed
rillsoft_calendar_source_import - First observed
rillsoft_calendar_update - First observed
rillsoft_document_ris_create - First observed
rillsoft_document_ris_delete - First observed
rillsoft_document_ris_get - First observed
rillsoft_document_ris_list - First observed
rillsoft_document_ris_update - First observed
rillsoft_element_delete - First observed
rillsoft_element_move - First observed
rillsoft_element_reorder - First observed
rillsoft_element_subproject_group - First observed
rillsoft_fixed_element_list - First observed
rillsoft_folder_ris_create - First observed
rillsoft_folder_ris_delete - First observed
rillsoft_folder_ris_list - First observed
rillsoft_folder_ris_move - First observed
rillsoft_folder_ris_update - First observed
rillsoft_history_redo - First observed
rillsoft_history_undo - First observed
rillsoft_machine_sharing_create - First observed
rillsoft_machine_sharing_release - First observed
rillsoft_outline_apply - First observed
rillsoft_outline_get - First observed
rillsoft_outline_row_apply - First observed
rillsoft_portfolio_file_open - First observed
rillsoft_portfolio_project_files_save - First observed
rillsoft_portfolio_ris_create - First observed
rillsoft_portfolio_ris_delete - First observed
rillsoft_portfolio_ris_list - First observed
rillsoft_portfolio_ris_open - First observed
rillsoft_portfolio_ris_save - First observed
rillsoft_portfolio_ris_update - First observed
rillsoft_project_conflict_list - First observed
rillsoft_project_create - First observed
rillsoft_project_file_export_xml - First observed
rillsoft_project_file_open - First observed
rillsoft_project_file_save - First observed
rillsoft_project_file_save_as - First observed
rillsoft_project_renumber - First observed
rillsoft_project_reschedule - First observed
rillsoft_project_ris_delete - First observed
rillsoft_project_ris_list - First observed
rillsoft_project_ris_open - First observed
rillsoft_project_ris_save - First observed
rillsoft_project_ris_save_as - First observed
rillsoft_project_sort - First observed
rillsoft_project_status_date_reschedule - First observed
rillsoft_project_status_date_set - First observed
rillsoft_project_team_preference_remove - First observed
rillsoft_project_team_preference_set - First observed
rillsoft_project_tree_get - First observed
rillsoft_project_update - First observed
rillsoft_property_panel_close - First observed
rillsoft_property_panel_get - First observed
rillsoft_property_panel_open - First observed
rillsoft_resource_absence_list - First observed
rillsoft_resource_absence_sync - First observed
rillsoft_resource_pool_catalog_list - First observed
rillsoft_resource_pool_edit_close - First observed
rillsoft_resource_pool_edit_open - First observed
rillsoft_resource_pool_edit_save - First observed
rillsoft_resource_pool_file_select - First observed
rillsoft_resource_pool_get - First observed
rillsoft_resource_pool_resource_create - First observed
rillsoft_resource_pool_resource_delete - First observed
rillsoft_resource_pool_resource_get - First observed
rillsoft_resource_pool_resource_update - First observed
rillsoft_resource_pool_ris_list - First observed
rillsoft_resource_pool_ris_select - First observed
rillsoft_resource_usage_list - First observed
rillsoft_resource_usage_set - First observed
rillsoft_row_selection_apply - First observed
rillsoft_row_selection_get - First observed
rillsoft_session_dialogs_set - First observed
rillsoft_subproject_create - First observed
rillsoft_subproject_delete - First observed
rillsoft_subproject_update - First observed
rillsoft_task_create - First observed
rillsoft_task_delete - First observed
rillsoft_task_dependency_create - First observed
rillsoft_task_dependency_delete - First observed
rillsoft_task_employee_assignment_set - First observed
rillsoft_task_machine_assignment_set - First observed
rillsoft_task_machine_role_assignment_derive - First observed
rillsoft_task_machine_role_assignment_set - First observed
rillsoft_task_material_assignment_set - First observed
rillsoft_task_progress_recalculate - First observed
rillsoft_task_progress_set - First observed
rillsoft_task_resource_assignment_fill - First observed
rillsoft_task_resource_assignment_remove - First observed
rillsoft_task_resource_candidate_list - First observed
rillsoft_task_role_assignment_derive - First observed
rillsoft_task_role_assignment_set - First observed
rillsoft_task_split - First observed
rillsoft_task_split_options_get - First observed
rillsoft_task_update - First observed
rillsoft_timescale_apply - First observed
rillsoft_variance_report_get - First observed
rillsoft_view_columns_apply - First observed
rillsoft_view_columns_get - First observed
rillsoft_view_favorite_create - First observed
rillsoft_view_favorite_delete - First observed
rillsoft_view_favorite_list - First observed
rillsoft_view_favorite_select - First observed
rillsoft_view_state_apply - First observed
rillsoft_view_state_get - First observed
rillsoft_window_layout_apply - First observed
rillsoft_window_layout_get
TDQS
Scored across 118 tools
Many tools target closely related operations: generic vs specific element deletion/move (rillsoft_element_delete vs rillsoft_task_delete/rillsoft_subproject_delete), multiple assignment setters (role, machine role, employee, machine, material), and several view/display tools. However, the descriptions consistently cross-reference and delimit each other, so an attentive agent can usually tell them apart.
All tools share a uniform rillsoft_ prefix, snake_case, and a consistent resource_action pattern (e.g., rillsoft_task_create, rillsoft_calendar_update, rillsoft_view_state_apply). There are no mixed conventions or vague verb styles.
With 118 tools, the server is far beyond the typical 3-15 range and even beyond the 50+ threshold for extreme mismatch. Many operations could be consolidated (e.g., generic element tools, multiple view-state tools), making the surface unwieldy despite the domain's breadth.
The tool set covers the full project lifecycle: project/task/subproject CRUD, dependencies, resource pool management, calendars, baselines, documents, portfolios, RIS and file operations, scheduling, and view configuration. No obvious dead ends or missing core operations are apparent.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for generating rough-draft project plans from natural-language prompts.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Remote MCP server to read and edit GanttFather projects: tasks, dates, dependencies, critical path.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that enables LLMs to read and analyze Microsoft Project schedules, including critical path, resources, and advanced construction planning layers (AWP and LPS) for work packages and Lean planning.MIT
- AlicenseNot gradedqualityAmaintenanceEnables MCP-capable assistants to control an open ArcGIS Pro project locally over TCP 127.0.0.1, with 68 commands and 167 tools for layers, editing, symbology, layouts, geoprocessing, and arcpy execution.2MIT
- AlicenseBqualityCmaintenanceEnables AI assistants and clients to control and automate FlexSim simulations via MCP tools for model operations, execution, node data access, FlexScript evaluation, results export, and batch what-if experiments.73MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to control, automate, and query desktop project-management schedules in real time via native Windows COM, including task/WBS management, resource and cost assignment, baselines, critical path, status reporting, and PDF export.MIT