nextcloud-agent
Provides tools for managing Nextcloud operations, including calendar, contacts, files, sharing, and user management.
Click 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., "@nextcloud-agentlist files in the Documents folder"
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.
Nextcloud Agent
CLI or API | MCP | Agent
Documentation — Installation, deployment, usage across the API, CLI, and MCP interfaces, and guidance for provisioning the backing Nextcloud instance are maintained in the official documentation.
Related MCP server: nc-mcp-server
Overview
Nextcloud Agent is a production-grade Agent and Model Context Protocol (MCP) server designed to interface directly with Nextcloud MCP Server for Agentic AI!.
Key Features
Consolidated Action-Routed MCP Tools: Minimizes token overhead and eliminates tool bloat in LLM contexts by grouping methods into optimized, togglable tool modules.
Enterprise-Grade Security: Complete support for Eunomia policies, OIDC token delegation, and granular execution context tracking.
Integrated Graph Agent: Built-in Pydantic AI agent supporting the Agent Control Protocol (ACP) and standard Web interfaces (AG-UI).
Native Telemetry & Tracing: Out-of-the-box OpenTelemetry exports and native Langfuse tracing.
CLI or API
This agent wraps the Nextcloud MCP Server for Agentic AI! API. The operator can interact with it programmatically or via its integrated execution entrypoints.
Detailed instructions on how to use the underlying API wrappers, extended schema bindings, and developer SDK references are maintained in docs/index.md.
MCP
This server use dynamic Action-Routed tools to optimize token overhead and maximize IDE compatibility.
Available MCP Tools
Condensed action-routed tools (MCP_TOOL_MODE=condensed)
MCP Tool | Toggle Env Var | Description |
|
| Manage nextcloud calendar operations. |
|
| Manage nextcloud contacts operations. |
|
| Manage nextcloud files operations. |
|
| Fetch a Nextcloud file over WebDAV and natively store it in the knowledge |
|
| Manage nextcloud sharing operations. |
|
| Manage nextcloud user operations. |
Verbose 1:1 API-mapped tools (MCP_TOOL_MODE=verbose or both)
MCP Tool | Toggle Env Var | Description |
|
| Alias for copy_resource to support MCP server action. |
|
| Copy a file or directory. |
|
| Alias for create_event to support MCP server action. |
|
| Invoke the create_contact operation. |
|
| Create a directory (MKCOL). |
|
| Create an event with ICS data. |
|
| Alias for create_directory to support MCP server action. |
|
| Create a share. |
|
| Alias for delete_resource to support MCP server action. |
|
| Delete a file or directory. |
|
| Delete a share. |
|
| Helper to get properties of a path by listing its contents. |
|
| Get current user info. |
|
| Get storage quota information. |
|
| List address books. |
|
| Alias for list_events to support MCP server action. |
|
| List available calendars. |
|
| List contacts in address book. |
|
| List files and folders in a directory using PROPFIND. |
|
| List events in a calendar (returns basic info). |
|
| Alias for list_contents to support MCP server action. |
|
| List all shares. |
|
| Alias for move_resource to support MCP server action. |
|
| Move a file or directory. |
|
| Download a file. |
|
| Upload a file. |
6 action-routed tool(s) · 26 verbose 1:1 tool(s). Each is enabled unless its <DOMAIN>TOOL toggle is set false; MCP_TOOL_MODE selects the surface (intent default — the six verb-tools, granular set loaded on demand · condensed action-routed · verbose 1:1 · both). Auto-generated — do not edit.
Detailed tool schemas, parameter shapes, and validation constraints are preserved in docs/usage.md.
Dynamic Tool Selection & Visibility
This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows the operator to restrict the set of exposed tools to prevent blowing up the LLM's context window.
The operator can configure tool filtering via multiple input channels:
CLI Arguments: Pass
--toolsor--toolsets(or their disabled counterparts--disabled-toolsand--disabled-toolsets) during startup.Environment Variables: Define standard environment variables:
MCP_ENABLED_TOOLS/MCP_DISABLED_TOOLSMCP_ENABLED_TAGS/MCP_DISABLED_TAGS
HTTP SSE Request Headers: Pass custom headers during transport initialization:
x-mcp-enabled-tools/x-mcp-disabled-toolsx-mcp-enabled-tags/x-mcp-disabled-tags
HTTP SSE Request Query Parameters: Append query parameters directly to the operator's transport connection URL:
?tools=tool1,tool2?tags=tag1
When query strings or parameters are supplied, an LLM-free Knowledge Graph resolution layer (using DynamicToolOrchestrator) matches query intents against known tool tags, names, or descriptions, with safe fallback and automated 24-hour background cache refreshing.
MCP Configuration Examples
Install the connector-focused
[mcp]extra. Examples usenextcloud-agent[mcp]to add FastMCP / FastAPI throughagent-connector-sdk[mcp]; the required Agent Utilities core still carriesepistemic-graph[full]. The[agent-runtime]extra additionally enables model orchestration.
stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
{
"mcpServers": {
"nextcloud-mcp": {
"command": "uvx",
"args": [
"--from",
"nextcloud-agent[mcp]",
"nextcloud-mcp"
],
"env": {
"CALENDARTOOL": "True",
"CONTACTSTOOL": "True",
"FILESTOOL": "True",
"NEXTCLOUD_PASSWORD": "your_password",
"NEXTCLOUD_URL": "https://nextcloud.example.com",
"NEXTCLOUD_USERNAME": "your_username",
"SHARINGTOOL": "True",
"USERTOOL": "True"
}
}
}
}Runtime references require an alias-aware launcher such as Arbora. Other launchers must omit those entries and inject the resolved values through their own runtime secret boundary.
Streamable-HTTP Transport (networked / production)
{
"mcpServers": {
"nextcloud-mcp": {
"command": "uvx",
"args": [
"--from",
"nextcloud-agent[mcp]",
"nextcloud-mcp",
"--transport",
"streamable-http",
"--port",
"8000"
],
"env": {
"TRANSPORT": "streamable-http",
"HOST": "127.0.0.1",
"PORT": "8000",
"CALENDARTOOL": "True",
"CONTACTSTOOL": "True",
"FILESTOOL": "True",
"NEXTCLOUD_PASSWORD": "your_password",
"NEXTCLOUD_URL": "https://nextcloud.example.com",
"NEXTCLOUD_USERNAME": "your_username",
"SHARINGTOOL": "True",
"USERTOOL": "True"
}
}
}
}Alternatively, connect to a pre-deployed Streamable-HTTP instance by url:
{
"mcpServers": {
"nextcloud-mcp": {
"url": "http://localhost:8000/nextcloud-mcp/mcp"
}
}
}Run a reviewed container image as a least-privilege stdio child (no listener or published port):
docker run -i --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
--pids-limit=256 \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
-e TRANSPORT=stdio \
-e MCP_TOOL_MODE=intent \
-e CALENDARTOOL=True \
-e CONTACTSTOOL=True \
-e FILESTOOL=True \
-e INGESTTOOL=True \
-e NEXTCLOUD_PASSWORD=your_password \
-e NEXTCLOUD_URL=https://nextcloud.example.com \
-e NEXTCLOUD_USERNAME=your_username \
-e SHARINGTOOL=True \
-e USERTOOL=True \
registry.example.invalid/nextcloud-agent@sha256:<digest> nextcloud-mcpFor containerized network HTTP, supply an authenticated TLS ingress (or
direct server TLS), exact MCP_ALLOWED_HOSTS, and an exact trusted-proxy
CIDR policy through the operator-owned deployment profile. The generator
does not emit an unauthenticated non-loopback listener.
Auto-generated from the code-read env surface (MCP_TOOL_MODE + package vars) — do not edit.
Additional Deployment Options
nextcloud-agent can also run as a local container (Docker / Podman / uv) or be
consumed from a remote deployment. The
Deployment guide has full, copy-paste
mcp_config.json for all four transports — stdio, streamable-http,
local container / uv, and remote URL:
Local container / uv — launch the server from
mcp_config.jsonviauvx,docker run, orpodman run, or point at a local streamable-http container byurl. The published container runs as a reviewed, least-privilege stdio child with no listener or published port by default (see the hardeneddocker runexample above).Remote URL — connect to a server deployed behind Caddy at
https://nextcloud-mcp.example.invalid/mcpusing the"url"key, or through any operator-supplied authenticated HTTPS ingress. Keep its URL, outbound identity references, trust profile, and exactMCP_ALLOWED_HOSTSinAgentConfig.
Agent
This repository features a fully integrated Pydantic AI Graph Agent. It communicates over the Agent Control Protocol (ACP) and interacts smoothly with the Agent Web UI (AG-UI) and Terminal interface.
Running the Agent CLI
To start the interactive command-line agent:
# Set credentials
export NEXTCLOUD_URL="your_value"
export NEXTCLOUD_USERNAME="your_value"
export NEXTCLOUD_PASSWORD="your_value"
# Run the agent server
nextcloud-agent --provider openai --model-id gpt-4oDocker Compose Orchestration
The following docker/agent.compose.yml configures the Agent, Web UI, and Terminal Interface together:
version: '3.8'
services:
nextcloud-agent-mcp:
image: knucklessg1/nextcloud-agent:mcp
container_name: nextcloud-agent-mcp
hostname: nextcloud-agent-mcp
restart: always
env_file:
- ../.env
environment:
- PYTHONUNBUFFERED=1
- HOST=0.0.0.0
- PORT=8000
- TRANSPORT=streamable-http
ports:
- "8000:8000"
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
nextcloud-agent-agent:
image: knucklessg1/nextcloud-agent:2.3.3
container_name: nextcloud-agent-agent
hostname: nextcloud-agent-agent
restart: always
depends_on:
- nextcloud-agent-mcp
env_file:
- ../.env
command: [ "nextcloud-agent" ]
environment:
- PYTHONUNBUFFERED=1
- HOST=0.0.0.0
- PORT=9016
- MCP_URL=http://nextcloud-agent-mcp:8000/mcp
- ENABLE_OTEL=True
ports:
- "9016:9016"
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:9016/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
Detailed graph node architecture explanations, custom skill configurations, and agentic trace guides are available in docs/deployment.md.
Security & Governance
Built directly upon the enterprise-ready agent-connector-sdk core, standard security parameters are fully supported:
Access Control & Policy Enforcement
Eunomia Policies: Fine-grained, policy-driven tool authorization. Supports
none, localembedded(mcp_policies.json), or centralizedremotemodes.OIDC Token Delegation: Compliant with RFC 8693 token exchange for flowing authenticating user credentials from Web UI / ACP → Agent → MCP.
Scoped Credentials: Execution context runs restricted to the specific caller identity.
Runtime Security Grid
Feature | Feature | Enablement |
Tool Guard | Sensitivity inspection with human-in-the-loop validation | Enabled by default |
Prompt Injection Defense | Input scanning, repetition monitoring, and recursive loop blocks | Enabled by default |
Context Safety Guard | Stuck-loop detectors and contextual overflow preemptive alerts | Enabled by default |
Environment Variables
Package environment variables
Variable | Example | Description |
|
| |
|
| |
|
| options: stdio, streamable-http, sse |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| options: none, embedded, remote |
|
| |
|
| |
|
| |
|
| |
| secret-injected | |
|
| AgentConfig named transport profile |
|
| Direct runtime profile reference |
|
| Named runtime profile catalog |
|
| |
|
| |
|
| |
|
| |
|
|
Inherited agent-connector-sdk variables (apply to every connector)
Variable | Example | Description |
| — | Comma-separated tool allow-list |
| — | Comma-separated tool deny-list |
| — | Comma-separated tag allow-list |
| — | Comma-separated tag deny-list |
| — | Outbound MCP child auth: |
| — | OIDC client id (service-account auth) |
|
| Runtime secret reference for the OIDC service account |
| — | HTTP Basic username ( |
|
| Runtime secret reference for HTTP Basic auth ( |
|
| Verbose logging |
|
| Unbuffered stdout (recommended in containers) |
|
| URL of the MCP server the agent connects to |
23 package + 16 inherited variable(s). Auto-generated from .env.example + the shared agent-connector-sdk set — do not edit.
Every variable the server reads, grouped by purpose. See .env.example
for a copy-paste starting point.
Connection & Credentials
Variable | Description | Default |
| Base URL of the Nextcloud instance |
|
| Username (basic auth) | — |
| Password / app password (basic auth) | — |
| AgentConfig transport profile selector; peer verification is mandatory | — |
MCP server / transport
Variable | Description | Default |
|
|
|
| Bind host (HTTP transports) |
|
| Bind port (HTTP transports) |
|
| Comma-separated tool allow/deny list | — |
| Comma-separated tag allow/deny list | — |
Tool toggles
Each action-routed tool can be disabled individually via its toggle env var (set to false):
FILESTOOL, USERTOOL, SHARINGTOOL, CALENDARTOOL, CONTACTSTOOL. See the
Available MCP Tools table above.
Telemetry & governance
Variable | Description | Default |
| Enable OpenTelemetry export |
|
| OTLP collector endpoint | — |
| OTLP auth keys | — |
| OTLP protocol (e.g. | — |
| Authorization mode: |
|
| Embedded policy file |
|
| Remote Eunomia server URL | — |
Installation
Pick the extra that matches what the operator want to run:
Extra | Installs | Use when |
| Connector-focused MCP server ( | The operator only run the MCP server (smallest install / image) |
| Agent runtime ( | The operator run the integrated agent |
| Everything ( | Development / both surfaces |
# Connector-focused MCP server (includes the shared graph engine)
uv pip install "nextcloud-agent[mcp]"
# Agent runtime (adds model orchestration to the shared graph engine)
uv pip install "nextcloud-agent[agent]"
# Everything (development)
uv pip install "nextcloud-agent[all]" # or: python -m pip install "nextcloud-agent[all]"Container images (:mcp vs :agent)
One multi-stage docker/Dockerfile builds two right-sized images, selected by --target:
Image tag | Build target | Contents | Entrypoint |
|
|
|
|
|
|
|
|
docker build --target mcp -t knucklessg1/nextcloud-agent:mcp docker/ # connector-focused MCP server
docker build --target agent -t knucklessg1/nextcloud-agent:2.3.3 docker/ # agent runtimedocker/mcp.compose.yml runs the connector-focused :mcp server; docker/agent.compose.yml runs the
agent (:2.3.3) with a co-located :mcp sidecar.
Knowledge-graph database (epistemic-graph)
Both [mcp] and [agent] carry the epistemic-graph engine through the required
Agent Utilities core dependency (epistemic-graph[full]). The [mcp] extra keeps
the server connector-focused; [agent] also enables model orchestration. Local
deployments can use the bundled engine. For production — or to share one knowledge graph
across multiple agents — run epistemic-graph as its own database container and point the
agent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connection
config, and the full database architecture (with diagrams) are documented in the
epistemic-graph deployment guide.
Documentation
The complete documentation is published as the official documentation site and is the recommended reference for installation, deployment, and day-to-day operation.
Page | Contents |
pip, source, uv, prebuilt Docker image | |
run the MCP server and the agent, Compose, Caddy + Technitium, env config | |
the MCP tools, the | |
deploy Nextcloud with Docker | |
the action-routed tool surface and ecosystem role | |
concept registry ( |
Repository Owners
Contribute
Contributions are welcome! Please ensure code quality by running local checks before submitting pull requests:
Format code using
ruff format .Lint code using
ruff check .Validate type-safety with
mypy .Ran test suites using
pytest
Deploy with agent-os-genesis
This package can be provisioned for you — skill-guided — by the agent-os-genesis
universal skill (its single-package deploy mode): it picks your install method, seeds
secrets to OpenBao/Vault (or .env), trusts your enterprise CA, registers the MCP
server, and verifies it — the same machinery that stands up the whole Agent OS, narrowed
to just this package. Ask your agent to "deploy nextcloud-agent with agent-os-genesis".
Install mode | Command |
Bare-metal, prod (PyPI) |
|
Bare-metal, dev (editable) |
|
Container, prod | deploy |
Container, dev (editable) | deploy |
Secrets are read-existing + seeded via vault_sync — you are only prompted for what's missing.
Deploy with agent-connector-sdk-deployment
Provision this package with the consolidated agent-connector-sdk-deployment
workflow. It selects an installed-package, editable-source, or immutable-container
path; records only runtime secret and TLS-profile references in AgentConfig; and
runs doctor, registration, policy, observability, and rollback gates. Ask your agent
to "deploy nextcloud-agent with agent-connector-sdk-deployment".
Install mode | Command |
Installed package |
|
Editable source |
|
Immutable container | deploy |
The repository embeds no deployment profile, credential value, certificate path, or
environment-specific endpoint. Supply those at runtime through AgentConfig and the
configured secret provider.
Governed capability contract
This package ships a compact canonical skill surface with specialist procedures
kept as referenced workflows. The current MCP tools, skill metadata,
connector_manifest.yml, ontology, mappings, shapes, fixtures, migrations,
tool-schema fingerprints, and certification metadata form one versioned
capability contract. Validate them together; do not rely on stale tool names or
historical per-task skill wrappers.
Runtime endpoints, credentials, certificate trust, tenant identity, retention, and observability policy are deployment inputs and are never packaged values. See Configuration, trust, and privacy before enabling a network transport, connector ingestion, Arbora delegation, or trace export.
Available Tools
26 toolsnextcloud_copy_itemCopy itemD
Alias for copy_resource to support MCP server action.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_path | Yes | ||
| overwrite | No | ||
| source_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, so the safety profile is partly covered, but the description adds nothing: it does not explain what happens when dest_path already exists, what overwrite does, or whether a failed copy of a directory is partial. For a mutation tool with an undocumented overwrite flag, that is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is one short sentence, so nothing is bloated, but the single sentence is an internal implementation note ('Alias ... to support MCP server action') that conveys no information useful to a caller. Brevity here comes from under-specification rather than economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Three parameters, two required, zero schema descriptions, no output schema, and no annotations beyond safety hints. The description should carry the load of explaining paths, overwrite semantics, and return behavior, and it does none of it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description supplies no parameter meaning whatsoever. The critical semantics of overwrite (default false, presumably failing or skipping on existing destination) and the file-vs-directory behavior of source_path/dest_path are left completely unexplained.
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 only restates that it is an alias for copy_resource, a sibling tool it never explains; the actual purpose (copying a file/folder from source_path to dest_path) is inferable only from the tool name and parameter names. It does not distinguish this from nextcloud_move_item, nextcloud_copy_resource, or nextcloud_create_folder in any substantive way.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance at all. Saying it is an 'alias ... to support MCP server action' gives the agent no condition for choosing this over nextcloud_copy_resource, nor any mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_copy_resourceCopy resourceC
Copy a file or directory.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_path | Yes | ||
| overwrite | No | ||
| source_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. But the description adds nothing beyond that: it does not say whether recursive directory copies are supported, whether an existing destination causes an error, or what the 'overwrite' default of false actually means in practice — the key behavioral question for a copy 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?
A single front-loaded sentence with zero waste, which is structurally good. The problem is that it is under-specified rather than concise: one short clause cannot cover a mutation tool with an ambiguous overwrite flag.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, no output schema and 0% schema coverage, the description should explain destination-conflict behavior and directory semantics. It supplies none of that, so an agent cannot confidently call this tool correctly when the destination exists or when copying a folder tree.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining three parameters and it explains none. source_path and dest_path are self-evident from their names, but 'overwrite' (default false) is genuinely ambiguous — fail vs. skip vs. silently overwrite — and the description offers no clarification.
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 (copy) and resource (file or directory), so the operation is unambiguous on its own. However, it does nothing to distinguish itself from the near-identical sibling nextcloud_copy_item (nor from nextcloud_move_resource/move_item), leaving the agent to guess which copy tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: no mention of when to prefer this over nextcloud_copy_item, no prerequisites, and no indication of what happens when the destination already exists. The agent must infer everything from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_create_calendar_eventCreate calendar eventD
Alias for create_event to support MCP server action.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| event_data | Yes | ||
| calendar_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the agent knows this is a non-destructive write to an open world. The description adds nothing beyond that — it does not say what is created, whether the target calendar must exist, whether duplicates are tolerated, or what the server returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short, front-loaded sentence with no filler, so structure is fine. The problem is that the one sentence carries almost no information, and the alias relationship is the only fact conveyed.
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 3 parameters at 0% schema description coverage, no output schema, and a mutation tool with no permission or format detail, the definition is far too thin. An agent would have to guess both the payload format and the correct relationship to nextcloud_create_event 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 coverage is 0% and the description provides no parameter meaning at all. Critically, event_data is a bare string with no hint about whether it is JSON, iCalendar text, or something else, and calendar_url format is equally unexplained — the agent cannot construct a valid call from this description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description only says it is "Alias for create_event," which restates the tool name rather than explaining what the tool does. It never states that it creates a calendar event, what the event data represents, or how it differs functionally from the sibling nextcloud_create_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to pick this alias over nextcloud_create_event, which is the key decision an agent faces given both tools exist. "To support MCP server action" is an implementation note, not a usage rule, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_create_contactCreate contactDIdempotent
Invoke the create_contact operation.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| vcard_data | Yes | ||
| address_book_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile exists elsewhere. The description adds no behavioral context whatsoever - nothing about naming collisions, overwrite behavior implied by idempotency, or remote-server interaction despite openWorldHint=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?
It is short, but the brevity is under-specification rather than conciseness - a single tautological sentence with no front-loaded useful content. Not verbose, but earns nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with 3 undocumented parameters, no output schema, and 0% schema coverage needs a description that compensates; this one supplies nothing. An agent has no basis for constructing address_book_url or vcard_data 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 0% across 3 parameters (address_book_url, vcard_data, filename), so the description carries the full burden and completely fails it. It names no parameter, gives no format for vcard_data (raw vCard string? base64?), and no hint that filename is an optional override.
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 restates the tool name and title ('create_contact operation') without adding any specificity about what a contact is in this system or where it lands. Only the tool name itself conveys verb+resource; the sentence contributes nothing an agent couldn't infer from 'nextcloud_create_contact'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this versus siblings like nextcloud_create_share, nextcloud_create_calendar_event, or nextcloud_list_address_books. No prerequisites (does the address book need to exist? does list_address_books need calling first?) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_create_directoryCreate directoryC
Create a directory (MKCOL).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), lowering the bar. The "MKCOL" reference adds a genuine technical signal — WebDAV collection creation, which implies parents are not auto-created and an existing collection yields an error — but the description never states that behavior explicitly, nor what happens on conflict.
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 short, front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification rather than tight scoping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and a fully undocumented required parameter, the definition should cover path format and existing-directory/conflict behavior. Neither is addressed, so an agent cannot reliably construct a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the single `path` parameter is entirely undocumented in both schema and description. The description does not say whether the path is absolute or relative to the user root, whether a leading slash or trailing slash is expected, or which parent it is created under.
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 ("Create a directory") and adds the WebDAV method (MKCOL), so the operation is unambiguous. It does not distinguish itself from the sibling nextcloud_create_folder or nextcloud_create_resource-style tools, leaving the agent to infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus nextcloud_create_folder, which appears to overlap directly, nor on prerequisites (parent existence, permissions). The agent must guess which creation tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_create_eventCreate eventCIdempotent
Create an event with ICS data.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| event_data | Yes | ||
| calendar_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only 'with ICS data' and says nothing about permissions, what calendar_url must point to, or how idempotency keys are derived from event_data/filename.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and has no wasted words. It is too terse rather than rambling, but the structure is at least clean and easy to parse.
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 three parameters at 0% schema description coverage and no output schema, the description should clarify the ICS string format, the calendar_url target, and the filename default. None of that is present, leaving the agent to guess at call 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 description coverage is 0%, so the description must explain the three parameters. It only hints that `event_data` is ICS data and leaves `calendar_url` and `filename` completely undefined, including whether `filename` is derived from the event UID or controls storage naming.
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 ('Create an event') and adds the notable detail that the payload is ICS data. However, it does not distinguish itself from the sibling tool `nextcloud_create_calendar_event`, so an agent cannot tell which creation tool is correct without opening both 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?
There is no guidance on when to use this tool versus `nextcloud_create_calendar_event` or the other create_* siblings. Usage is only implied by the tool name and the word 'event'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_create_folderCreate folderD
Alias for create_directory to support MCP server action.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, so the safety profile is covered. The description adds nothing behavioral beyond that: it never says whether the parent path must exist, whether an existing folder is overwritten or errors out, or whether creation is recursive. Calling it an 'alias' conveys equivalence, not 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?
It is a single short sentence with no filler, so it is certainly concise, but the brevity comes from omission rather than compression. Nothing is front-loaded because there is no substantive content to order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and a completely undocumented required parameter, the description supplies neither behavior nor input semantics. An agent cannot verify success conditions, error cases, or the meaning of the path argument from the definition as written.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'path' parameter is documented nowhere. The description provides no meaning for path — absolute vs relative, whether it names the new folder or its parent, or the expected delimiter/format — so the agent must guess the most consequential input the tool takes.
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 only says it is an alias for create_directory; the actual verb+resource ('create a folder') is inferred from the title and the aliased sibling. It identifies the tool's identity but does not describe what the operation does or how it differs from nextcloud_create_directory, which remains a live sibling in the same toolset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus nextcloud_create_directory, which it explicitly declares itself an alias of. The agent is left with two indistinguishable tools and no rule for choosing between them, and no prerequisites (parent existence, permissions) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_delete_itemDelete itemCDestructive
Alias for delete_resource to support MCP server action.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered by structured data. The description adds nothing beyond the alias fact – no statement about irreversibility, confirmation requirements, or what happens when path does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short, front-loaded sentence with no padding, so structurally fine. However, the one sentence spent on alias metadata does not earn its place against the missing explanation of what gets deleted and what path means.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive operation with no output schema and an entirely undocumented parameter, so the description carries most of the burden – yet it covers neither the affected resource type nor the path format nor error behavior. The alias note is the only useful content.
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 path parameter with 0% schema description coverage, so the description must explain its format and semantics. It says nothing at all about path – not whether it is root-relative, URL-encoded, or whether it addresses files versus folders.
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 only says it is an alias for delete_resource; it does not state what an "item" is (file, folder, share, calendar, contact) or what resource domain it operates on. A reader can infer deletion from the name and the alias pointer, but the description itself adds no scope beyond the title.
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?
Naming delete_resource does tell the agent the two calls are functionally equivalent, which is faint routing value. But there is no guidance on when to prefer delete_item over the direct delete_resource sibling, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_delete_resourceDelete resourceCDestructiveIdempotent
Delete a file or directory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the description adds no safety information beyond structured fields. It does not say whether directory deletion is recursive, whether deletion is permanent or goes to trash, or what permissions are required.
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 short sentence with no wasted words. It is front-loaded, though its brevity contributes to the missing details noted in other dimensions.
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 file-system mutation with no output schema and 0% schema description coverage, the description is too sparse. It omits path format, recursive behavior, trash semantics, and sibling differentiation, leaving significant operational gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single path parameter has no description in the schema. The tool description does not clarify whether path is absolute or relative, how to specify root paths, or any format constraints, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: delete a file or directory. However, it does not distinguish this tool from the sibling nextcloud_delete_item, which appears to target the same resource type, leaving ambiguity for tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus nextcloud_delete_item, nor any prerequisites, exclusions, or context about deletion behavior. The agent must infer usage solely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_get_propertiesGet propertiesCRead-onlyIdempotent
Helper to get properties of a path by listing its contents.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description does add one non-obvious behavioral fact — that properties are derived by enumerating directory contents — but says nothing about what properties come back, cost on large directories, or behavior when the path is a file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb front-loaded and no filler. It is efficient, though the brevity comes at the cost of substance rather than from disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place an agent could learn what 'properties' actually contains (size, mtime, etag, permissions?), and it omits that entirely. For a helper whose return shape is undefined anywhere else, the definition is under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'path' parameter, so the description must carry the burden and it does not: no format (WebDAV vs local), no note that the default '' means the user root, no trailing-slash or file-vs-folder semantics. 'A path' adds nothing beyond the schema key name.
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?
It states a verb ('get') and resource ('properties of a path'), but 'properties' is never defined and the phrase 'by listing its contents' is an implementation detail rather than a purpose statement. An agent cannot tell from this how it differs from sibling nextcloud_list_contents or nextcloud_list_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of nextcloud_list_contents, nextcloud_list_files, or nextcloud_read_file, despite those siblings covering overlapping ground. The only hint, 'by listing its contents', is descriptive rather than prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_get_user_infoGet user infoCRead-onlyIdempotent
Get current user info.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds only the implicit notion of the authenticated user ('current'), without stating auth requirements, what is returned, or failure behavior for unauthenticated calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words and the key qualifier ('current') up front. It is terse to the point of under-specification, but that is penalized in completeness rather than here.
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 output schema, the agent has no idea which user fields are returned (id, display name, email, groups?), which is exactly what a 'get info' tool should hint at. Given the trivial parameter surface and full annotation coverage, this gap is the only meaningful one, but it is real.
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 schema has zero parameters, so the baseline is 4 and there is nothing to document. The word 'current' usefully confirms that no user identifier is accepted and the caller's own identity is used, which is a small but genuine addition.
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 is essentially a restatement of the tool name and title ('Get user info'), though the word 'current' does add a real scope qualifier that distinguishes it from nextcloud_get_user_quota and nextcloud_get_properties. It does not say what 'info' includes or how it differs from the quota sibling, so an agent still has to infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus nextcloud_get_user_quota or nextcloud_get_properties, both of which return user-adjacent data. No prerequisites or exclusions are stated; the agent must guess based on names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_get_user_quotaGet user quotaCRead-onlyIdempotent
Get storage quota information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered. The description adds nothing beyond restating the title — no note on whether the quota reflects used vs. total bytes, how unlimited quotas appear, or whether it is cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity shades into under-specification rather than tightness.
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?
There is no output schema, so the description bears responsibility for conveying what comes back — total vs. used vs. available bytes, units, or free-space semantics — and it says only 'storage quota information'. For a zero-argument tool that is the sole remaining gap, but it is an important one.
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 no parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The only missed opportunity is confirming that the target user is implicit rather than selectable.
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 verb (get) and resource (storage quota information), but leaves the subject ambiguous: with zero parameters it presumably returns the authenticated user's quota, yet the description never says so, and it doesn't distinguish itself from nextcloud_get_user_info, which plausibly overlaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus nextcloud_get_user_info or any listing tool, and no preconditions or exclusions are stated. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_list_address_booksList address booksCRead-onlyIdempotent
List address books.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile completely. The description adds nothing beyond that—no mention of what an address book record contains, whether it can return private/shared books, or authentication 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?
The description is a single short sentence with no filler, which is efficient. However, it is so terse that it is under-specified rather than genuinely concise—every word 'earns its place' only because there are so few 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?
There is no output schema, so the description carries the full burden of explaining what the agent will receive. It does not describe the return shape (e.g., book names, IDs, URIs, permissions) or whether the result is paginated, making it hard for an agent to know how to consume the output.
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. There is no parameter semantics to add, and the description correctly avoids inventing unnecessary 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?
The description 'List address books.' simply restates the tool name and title verbatim, offering no additional specificity. It does not clarify whether this lists personal address books, system-wide books, or how it relates to the sibling nextcloud_list_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With 25 sibling tools including nextcloud_list_contacts and nextcloud_get_properties, an agent gets no hint about the relationship between address books and contacts, or whether this is a prerequisite step for contact operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_list_calendar_eventsList calendar eventsCRead-onlyIdempotent
Alias for list_events to support MCP server action.
| Name | Required | Description | Default |
|---|---|---|---|
| calendar_url | Yes |
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=true, so the safety profile is covered. The description adds nothing beyond that: no indication of whether results are paginated, how many events are returned, whether recurring events are expanded, or what happens with an invalid calendar URL.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is one short sentence with no padding, so nothing is wasted. However, the brevity comes from under-specification rather than economy — the single sentence carries almost no actionable 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?
No output schema exists, so the description bears responsibility for conveying what comes back, and it says nothing about the returned event structure. With an undocumented required parameter and no behavioral detail, the definition is not sufficient for an agent to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the single required parameter calendar_url is undocumented everywhere. The description does not say whether it expects a full URL, a path, or a calendar ID, nor how to obtain one (e.g., via nextcloud_list_calendars) — a gap that directly risks malformed calls.
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 identifies the tool only by reference to another tool ('Alias for list_events'), rather than stating directly that it lists calendar events for a given calendar. Combined with the name and title the intent is inferable, but an agent reading the description alone gets a pointer instead of a verb+resource statement, and the aliasing relationship to the sibling nextcloud_list_events is implied rather than explained.
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?
'to support MCP server action' is internal jargon that gives no usage condition. It never says when to call this versus nextcloud_list_events or nextcloud_list_calendars, nor that calendar_url must identify an existing calendar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_list_calendarsList calendarsCRead-onlyIdempotent
List available calendars.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is fully covered. The description adds nothing beyond that – no note on scope (which calendars are 'available', primary vs shared), ordering, or what entries contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler or redundancy, and the purpose is front-loaded. It is terse to the point of thinness, 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 trivial zero-argument list tool, annotations plus name largely suffice, but with no output schema the description never says what a returned calendar looks like (identifier, name, access role), which is exactly what an agent needs to chain into event 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 there is nothing for the description to disambiguate; the absent-parameter 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 clear verb+resource ('List ... calendars'), but the wording essentially restates the tool name and title. It does not distinguish this from calendar-adjacent siblings such as nextcloud_list_calendar_events or nextcloud_list_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to call this versus the event-listing siblings, nor any mention that it is the natural first step to discover calendar IDs before creating or listing events. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_list_contactsList contactsCRead-onlyIdempotent
List contacts in address book.
| Name | Required | Description | Default |
|---|---|---|---|
| address_book_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description adds essentially no behavioral context beyond restating the operation, such as pagination, return shape, or authentication 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 a single front-loaded sentence with no wasted words. It is efficient, though it is arguably too terse given the undocumented required URL parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one required, undocumented parameter and no output schema, the description leaves important context missing: how to obtain address_book_url and what the listing returns or how it is scoped. Annotations cover safety but not invocation completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single required parameter. It only implies that an address book is involved and never explains the expected address_book_url format or where to get 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?
The description states a specific verb and resource: listing contacts within an address book. It clearly differs from siblings like nextcloud_list_address_books or nextcloud_create_contact, though it does not explicitly call out those distinctions.
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 'in address book': the agent knows it must target a specific address book, but there is no explicit guidance on when to use this versus nextcloud_list_address_books or how to obtain the required address_book_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_list_contentsList contentsCRead-onlyIdempotent
List files and folders in a directory using PROPFIND.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld, so the safety profile is covered. The description adds only the protocol name (PROPFIND), without explaining depth/recursion behavior, whether properties are returned, or how large listings are handled — the details an agent actually 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?
One short sentence, front-loaded with the verb and resource, with no filler. Brevity is appropriate here; the issue is missing content, not verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description is the only place to learn what a listing returns, and it says nothing. Combined with an undocumented path parameter, an agent lacks the information needed to call this reliably against the right sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single `path` parameter, so the description must compensate and does not. It never says whether path is absolute or relative to the user root, what the empty-string default means, or what format (slash-prefixed, URL-encoded) is expected.
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 and resource ("List files and folders in a directory"), so the purpose is understandable. But it never differentiates itself from the very similar sibling nextcloud_list_files, leaving an agent unable to pick between the two from the description 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?
No when-to-use, when-not-to-use, or named alternative is given. With siblings like nextcloud_list_files and nextcloud_get_properties in the catalog, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_list_eventsList eventsCRead-onlyIdempotent
List events in a calendar (returns basic info).
| Name | Required | Description | Default |
|---|---|---|---|
| calendar_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint as false, so safety is covered. The description adds only 'returns basic info', a genuinely useful hint that the payload is abbreviated (there is no output schema), but it says nothing about pagination, result limits, or error behavior for an invalid calendar_url.
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 short, front-loaded sentence with no filler. It is efficient, though the terseness borders on under-specification rather than disciplined brevity.
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 tool with no output schema and zero parameter documentation, the definition should at least explain the calendar_url format and how results are returned or bounded. With a confusingly similar sibling also present, the description leaves an agent without enough to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter at 0% description coverage, and the description does not compensate: it never says whether calendar_url is an absolute URL, a relative path, or an identifier, nor how to obtain one. This is exactly the case where the description must carry the load and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('List events') and scopes it to a calendar, which is more than a restatement of the name. However, it offers no way to tell it apart from the near-identical sibling nextcloud_list_calendar_events, so an agent has no basis for choosing between 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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as nextcloud_list_calendar_events or nextcloud_list_calendars. An agent facing both event-listing tools is left to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_list_filesList filesCRead-onlyIdempotent
Alias for list_contents to support MCP server action.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered. The description adds only the alias identity, not behavior: it says nothing about recursion, pagination, ordering, or what an empty path resolves to, and 'support MCP server action' is unexplained jargon.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no waste in length, but half of it ('to support MCP server action') is filler that earns no place, and the useful part (alias relationship) is under-explained.
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 real mutation-free but navigation-critical tool with a sibling duplicate and an undocumented parameter, the description leaves the two things an agent most needs unresolved: which tool to call and how to interpret path. Annotations cover safety but cannot fill these gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single 'path' parameter at 0% schema description coverage, the description must carry the meaning and does not. It never explains whether path is absolute or relative, or that the empty default means the user's root folder, so the agent must guess.
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 does not state what the tool does; it only asserts that it is an alias for list_contents. An agent must infer the actual behavior (listing files in a directory) from the name and title alone, and the phrase 'to support MCP server action' adds no semantic content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the near-identical sibling nextcloud_list_contents, which is exactly the ambiguity an alias creates. The agent is left to guess which of the two to invoke, with no stated preference, deprecation, or context difference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_move_itemMove itemC
Alias for move_resource to support MCP server action.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_path | Yes | ||
| overwrite | No | ||
| source_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, but the description adds nothing about behavior. Most importantly, the meaning of the 'overwrite' flag (whether an existing destination is silently replaced) is never disclosed, and destructiveHint=false could lead an agent to assume overwriting is safe. No return-value or error behavior is mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short, front-loaded sentence with no filler, so it is concise, but conciseness here comes at the cost of substance rather than being an efficient summary.
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 with no annotations beyond generic hints and no output schema, the description should carry the burden. Pointing to move_resource gives partial relief, but an agent still lacks the path semantics, overwrite behavior, and success/failure response 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 0% and the description supplies no parameter meaning at all. source_path, dest_path, and especially overwrite (default false) are completely undocumented, leaving the agent to guess whether paths are absolute, relative to a user root, or whether overwrite replaces or errors.
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 identifies the tool only by reference to a sibling ('Alias for move_resource'), so the actual verb+resource (moving a file/folder from source_path to dest_path) must be inferred from the other tool's name. It does distinguish this from siblings in the sense of declaring equivalence, but never states what the operation itself does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call nextcloud_move_item versus nextcloud_move_resource, or versus nextcloud_copy_item / nextcloud_list_contents. Calling it an 'alias' actually leaves the agent unsure which of the two identical-sounding tools it should prefer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_move_resourceMove resourceC
Move a file or directory.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_path | Yes | ||
| overwrite | No | ||
| source_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is not read-only and is open-world, so the description need not repeat safety basics. However, it adds almost no behavioral context: it does not explain the overwrite parameter, destination handling, error behavior, or what happens when the destination already 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?
The description is a single front-loaded sentence with no wasted words. Its brevity is appropriate structurally, even though the missing detail is penalized in other dimensions.
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 three parameters, 0% schema coverage, no output schema, and an overwrite option, the description is too sparse. It provides the basic action but not enough context for an agent to call the tool confidently in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three parameters, so the description must compensate, but it never mentions source_path, dest_path, or overwrite. The word 'move' implies a source and destination, but overwrite semantics and path expectations remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The sentence states a clear verb and resource: 'Move a file or directory.' An agent can understand the core action, but the description does not distinguish this tool from the sibling nextcloud_move_item, leaving routing ambiguity between two similarly named move 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?
There is no guidance on when to use this tool versus alternatives, and no mention of the closely related nextcloud_move_item or copy tools. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nextcloud_read_fileRead fileCRead-onlyIdempotent
Download a file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say what is returned (raw bytes, base64, text), how large files or binaries are handled, or what errors occur for a missing path or a directory. With annotations carrying the safety story, the remaining burden was return/content behavior, and it is unaddressed.
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 words are technically efficient and front-loaded with the verb, but the brevity here is under-specification rather than conciseness. A little more text on path format and return type would earn 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 one-parameter read tool with rich annotations and no output schema, the description should at minimum pin down path semantics and what the caller receives. Neither is present, so an agent knows the intent but not how to call it correctly or consume the result.
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 single required parameter 'path' has 0% schema description coverage, so the description must explain it and does not. It never says whether the path is absolute, relative to the user's root, whether a leading slash is required, whether directories are accepted, or how special characters are escaped.
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?
"Download a file" names a specific verb and resource, so the basic action is clear. However, it does nothing to distinguish this from siblings like nextcloud_list_files, nextcloud_get_properties, or nextcloud_write_file, leaving the agent to infer that this is the content-retrieval counterpart to the listing and writing 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?
There is no guidance on when to use this tool versus nextcloud_list_files (to discover paths) or nextcloud_get_properties (for metadata only). No prerequisites, no mention that a path must first be obtained, and 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.
nextcloud_write_fileWrite fileCIdempotent
Upload a file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| overwrite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing on top of that: it does not disclose that the default overwrite=true will silently replace an existing file, nor the binary content handling implied by the anyOf 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?
It is brief, but the brevity is under-specification rather than conciseness. A single generic sentence with no front-loaded constraints fails to earn its place by conveying any 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 write/mutation tool with three parameters and no output schema, the description should at minimum explain overwrite behavior and content type handling. The annotations cover the safety profile, but the operational semantics an agent needs to call this correctly 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 description coverage is 0%, so the description is the only place param meaning could be added, yet it mentions none of the three parameters. Path and content are largely self-explanatory by name, but the critical behavior of the optional overwrite flag (default true) is left entirely undisclosed.
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?
A specific verb ("Upload") and resource ("file") are present, so the basic operation is identifiable. However, it offers no differentiation from siblings like nextcloud_read_file, nextcloud_copy_resource, or nextcloud_move_item, and it never clarifies whether it creates new files or overwrites existing paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, no prerequisites (authentication, target directory existence), and no exclusions. Usage can only be inferred from the name.
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.
26 tool updates
v2.3.4- First observed
nextcloud_copy_item - First observed
nextcloud_copy_resource - First observed
nextcloud_create_calendar_event - First observed
nextcloud_create_contact - First observed
nextcloud_create_directory - First observed
nextcloud_create_event - First observed
nextcloud_create_folder - First observed
nextcloud_create_share - First observed
nextcloud_delete_item - First observed
nextcloud_delete_resource - First observed
nextcloud_delete_share - First observed
nextcloud_get_properties - First observed
nextcloud_get_user_info - First observed
nextcloud_get_user_quota - First observed
nextcloud_list_address_books - First observed
nextcloud_list_calendar_events - First observed
nextcloud_list_calendars - First observed
nextcloud_list_contacts - First observed
nextcloud_list_contents - First observed
nextcloud_list_events - First observed
nextcloud_list_files - First observed
nextcloud_list_shares - First observed
nextcloud_move_item - First observed
nextcloud_move_resource - First observed
nextcloud_read_file - First observed
nextcloud_write_file
TDQS
Scored across 26 tools
Eight tools are explicit aliases of one another (list_files/list_contents, move_item/move_resource, delete_item/delete_resource, copy_item/copy_resource, create_folder/create_directory, create_calendar_event/create_event, list_calendar_events/list_events), giving an agent no basis to choose between them. Only the file/share/calendar/contact/account groupings are genuinely distinct.
All tools share a clean nextcloud_verb_noun prefix pattern, which is good. However, the vocabulary is inconsistent for the same concepts — 'item', 'resource', 'file', 'folder', 'directory' are used interchangeably, and 'Alias for X' descriptions advertise the duplication rather than resolving it.
26 tools is heavy for this scope, and roughly a third of them are redundant aliases that add no capability. A well-scoped version would be about 15-17 tools covering the same domain.
Files (list/read/write/move/copy/create/delete) and shares have solid lifecycle coverage, but calendars and contacts are read/create-only with no update or delete for events, contacts, or address books. Users hitting those gaps will dead-end.
Maintenance
Related MCP Connectors
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Hosted MCP catalog with 30 tenant-isolated browser, RAG, AI, mail and media tools.
One OAuth connector for your team's remote MCP servers, with Tool Packs, guardrails and logs.
Single-connection MCP gateway discovering and executing 490+ verified MCP & A2A tools.
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP server for Nextcloud that exposes occ admin commands, OCS provisioning, and WebDAV file operations as tools.31MIT
- AlicenseAqualityAmaintenanceAn MCP server that exposes Nextcloud APIs as tools for AI assistants, enabling management of files, calendar, contacts, conversations, and more.2221MIT
- AlicenseNot gradedqualityAmaintenanceHigh-performance MCP data plane server for Nextcloud integration, enabling AI agents to read, write, organize, and manage files and CRM assets over WebDAV and OCS APIs.1MIT
- AlicenseNot gradedqualityAmaintenanceA native Nextcloud app that exposes the instance as an MCP server so Claude and other MCP clients can read, search, and (with admin-granted permissions) edit files, notes, calendars, Deck cards, and Talk conversations. It runs inside Nextcloud with OAuth or app-password sign-in, applying each user's own Nextcloud permissions and admin-controlled per-operation grants.10AGPL 3.0