ArchiveBox API
ArchiveBox API - A2A | AG-UI | MCP
Version: 0.2.0
Overview
ArchiveBox API Python Wrapper & Fast MCP Server!
This repository provides a Python wrapper for interacting with the ArchiveBox API, enabling programmatic access to web archiving functionality. It includes a Model Context Protocol (MCP) server for Agentic AI, enhanced with various authentication mechanisms, middleware for observability and control, and optional Eunomia authorization for policy-based access control.
Contributions are welcome!
All API Response objects are customized for the response call. You can access return values in a parent.value.nested_value format, or use parent.json() to get the response as a dictionary.
Features:
Authentication: Supports multiple authentication types including none (disabled), static (internal tokens), JWT, OAuth Proxy, OIDC Proxy, and Remote OAuth for external identity providers.
Middleware: Includes logging, timing, rate limiting, and error handling for robust server operation.
Eunomia Authorization: Optional policy-based authorization with embedded or remote Eunomia server integration.
Resources: Provides
instance_configfor ArchiveBox configuration.Prompts: Includes
cli_add_promptfor AI-driven interactions.
Related MCP server: mcp-archive
API
API Calls:
Authentication
Core Model (Snapshots, ArchiveResults, Tags)
CLI Commands (add, update, schedule, list, remove)
If your API call isn't supported, you can extend the functionality by adding custom endpoints or modifying the existing wrapper.
These are the API endpoints currently supported
MCP
All the available API Calls above are wrapped in MCP Tools. You can find those below with their tool descriptions and associated tag.
MCP Tools
Function Name | Description | Tag(s) |
| Generate an API token for a given username & password. |
|
| Validate an API token to make sure it's valid and non-expired. |
|
| Retrieve list of snapshots. |
|
| Get a specific Snapshot by abid or id. |
|
| List all ArchiveResult entries matching these filters. |
|
| Get a specific Tag by id or abid. |
|
| Get a specific Snapshot, ArchiveResult, or Tag by abid. |
|
| Execute archivebox add command. |
|
| Execute archivebox update command. |
|
| Execute archivebox schedule command. |
|
| Execute archivebox list command. |
|
| Execute archivebox remove command. |
|
A2A Agent
Architecture:
---
config:
layout: dagre
---
flowchart TB
subgraph subGraph0["Agent Capabilities"]
C["Agent"]
B["A2A Server - Uvicorn/FastAPI"]
D["MCP Tools"]
F["Agent Skills"]
end
C --> D & F
A["User Query"] --> B
B --> C
D --> E["Platform API"]
C:::agent
B:::server
A:::server
classDef server fill:#f9f,stroke:#333
classDef agent fill:#bbf,stroke:#333,stroke-width:2px
style B stroke:#000000,fill:#FFD600
style D stroke:#000000,fill:#BBDEFB
style F fill:#BBDEFB
style A fill:#C8E6C9
style subGraph0 fill:#FFF9C4Component Interaction Diagram
sequenceDiagram
participant User
participant Server as A2A Server
participant Agent as Agent
participant Skill as Agent Skills
participant MCP as MCP Tools
User->>Server: Send Query
Server->>Agent: Invoke Agent
Agent->>Skill: Analyze Skills Available
Skill->>Agent: Provide Guidance on Next Steps
Agent->>MCP: Invoke Tool
MCP-->>Agent: Tool Response Returned
Agent-->>Agent: Return Results Summarized
Agent-->>Server: Final Response
Server-->>User: OutputGraph Architecture
This agent uses pydantic-graph orchestration for intelligent routing and optimal context management.
---
title: Archivebox API Graph Agent
---
stateDiagram-v2
[*] --> RouterNode: User Query
RouterNode --> DomainNode: Classified Domain
RouterNode --> [*]: Low confidence / Error
DomainNode --> [*]: Domain ResultRouterNode: A fast, lightweight LLM (e.g.,
nvidia/nemotron-3-super) that classifies the user's query into one of the specialized domains.DomainNode: The executor node. For the selected domain, it dynamically sets environment variables to temporarily enable ONLY the tools relevant to that domain, creating a highly focused sub-agent (e.g.,
gpt-4o) to complete the request. This preserves LLM context and prevents tool hallucination.
Usage
MCP
MCP CLI
Short Flag | Long Flag | Description |
-h | --help | Display help information |
-t | --transport | Transport method: 'stdio', 'http', or 'sse' [legacy] (default: stdio) |
-s | --host | Host address for HTTP transport (default: 0.0.0.0) |
-p | --port | Port number for HTTP transport (default: 8000) |
--auth-type | Authentication type: 'none', 'static', 'jwt', 'oauth-proxy', 'oidc-proxy', 'remote-oauth' (default: none) | |
--token-jwks-uri | JWKS URI for JWT verification | |
--token-issuer | Issuer for JWT verification | |
--token-audience | Audience for JWT verification | |
--oauth-upstream-auth-endpoint | Upstream authorization endpoint for OAuth Proxy | |
--oauth-upstream-token-endpoint | Upstream token endpoint for OAuth Proxy | |
--oauth-upstream-client-id | Upstream client ID for OAuth Proxy | |
--oauth-upstream-client-secret | Upstream client secret for OAuth Proxy | |
--oauth-base-url | Base URL for OAuth Proxy | |
--oidc-config-url | OIDC configuration URL | |
--oidc-client-id | OIDC client ID | |
--oidc-client-secret | OIDC client secret | |
--oidc-base-url | Base URL for OIDC Proxy | |
--remote-auth-servers | Comma-separated list of authorization servers for Remote OAuth | |
--remote-base-url | Base URL for Remote OAuth | |
--allowed-client-redirect-uris | Comma-separated list of allowed client redirect URIs | |
--eunomia-type | Eunomia authorization type: 'none', 'embedded', 'remote' (default: none) | |
--eunomia-policy-file | Policy file for embedded Eunomia (default: mcp_policies.json) | |
--eunomia-remote-url | URL for remote Eunomia server |
Using as an MCP Server
The MCP Server can be run in two modes: stdio (for local testing) or http (for networked access). To start the server, use the following commands:
Run in stdio mode (default):
archivebox-mcp --transport "stdio"Run in HTTP mode:
archivebox-mcp --transport "http" --host "0.0.0.0" --port "8000"Basic API Usage
Token Authentication
#!/usr/bin/python
# coding: utf-8
import archivebox_api
archivebox_url = "<ARCHIVEBOX_URL>"
token = "<ARCHIVEBOX_TOKEN>"
client = archivebox_api.Api(
url=archivebox_url,
token=token
)
snapshots = client.get_snapshots()
print(f"Snapshots: {snapshots.json()}")Basic Authentication
#!/usr/bin/python
# coding: utf-8
import archivebox_api
username = "<ARCHIVEBOX_USERNAME>"
password = "<ARCHIVEBOX_PASSWORD>"
archivebox_url = "<ARCHIVEBOX_URL>"
client = archivebox_api.Api(
url=archivebox_url,
username=username,
password=password
)
snapshots = client.get_snapshots()
print(f"Snapshots: {snapshots.json()}")API Key Authentication
#!/usr/bin/python
# coding: utf-8
import archivebox_api
archivebox_url = "<ARCHIVEBOX_URL>"
api_key = "<ARCHIVEBOX_API_KEY>"
client = archivebox_api.Api(
url=archivebox_url,
api_key=api_key
)
snapshots = client.get_snapshots()
print(f"Snapshots: {snapshots.json()}")SSL Verify
#!/usr/bin/python
# coding: utf-8
import archivebox_api
username = "<ARCHIVEBOX_USERNAME>"
password = "<ARCHIVEBOX_PASSWORD>"
archivebox_url = "<ARCHIVEBOX_URL>"
client = archivebox_api.Api(
url=archivebox_url,
username=username,
password=password,
verify=False
)
snapshots = client.get_snapshots()
print(f"Snapshots: {snapshots.json()}")Deploy MCP Server as a Service
The ArchiveBox MCP server can be deployed using Docker, with configurable authentication, middleware, and Eunomia authorization.
Using Docker Run
docker pull archivebox/archivebox:latest
docker run -d \
--name archivebox-mcp \
-p 8004:8004 \
-e HOST=0.0.0.0 \
-e PORT=8004 \
-e TRANSPORT=http \
-e AUTH_TYPE=none \
-e EUNOMIA_TYPE=none \
-e ARCHIVEBOX_URL=https://yourinstance.archivebox.com \
-e ARCHIVEBOX_USERNAME=user \
-e ARCHIVEBOX_PASSWORD=pass \
-e ARCHIVEBOX_TOKEN=token \
-e ARCHIVEBOX_API_KEY=api_key \
-e ARCHIVEBOX_SSL_VERIFY=False \
archivebox/archivebox:latestFor advanced authentication (e.g., JWT, OAuth Proxy, OIDC Proxy, Remote OAuth) or Eunomia, add the relevant environment variables:
docker run -d \
--name archivebox-mcp \
-p 8004:8004 \
-e HOST=0.0.0.0 \
-e PORT=8004 \
-e TRANSPORT=http \
-e AUTH_TYPE=oidc-proxy \
-e OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration \
-e OIDC_CLIENT_ID=your-client-id \
-e OIDC_CLIENT_SECRET=your-client-secret \
-e OIDC_BASE_URL=https://your-server.com \
-e ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/* \
-e EUNOMIA_TYPE=embedded \
-e EUNOMIA_POLICY_FILE=/app/mcp_policies.json \
-e ARCHIVEBOX_URL=https://yourinstance.archivebox.com \
-e ARCHIVEBOX_USERNAME=user \
-e ARCHIVEBOX_PASSWORD=pass \
-e ARCHIVEBOX_TOKEN=token \
-e ARCHIVEBOX_API_KEY=api_key \
-e ARCHIVEBOX_SSL_VERIFY=False \
archivebox/archivebox:latestUsing Docker Compose
Create a docker-compose.yml file:
services:
archivebox-mcp:
image: archivebox/archivebox:latest
environment:
- HOST=0.0.0.0
- PORT=8004
- TRANSPORT=http
- AUTH_TYPE=none
- EUNOMIA_TYPE=none
- ARCHIVEBOX_URL=https://yourinstance.archivebox.com
- ARCHIVEBOX_USERNAME=user
- ARCHIVEBOX_PASSWORD=pass
- ARCHIVEBOX_TOKEN=token
- ARCHIVEBOX_API_KEY=api_key
- ARCHIVEBOX_SSL_VERIFY=False
ports:
- 8004:8004For advanced setups with authentication and Eunomia:
services:
archivebox-mcp:
image: archivebox/archivebox:latest
environment:
- HOST=0.0.0.0
- PORT=8004
- TRANSPORT=http
- AUTH_TYPE=oidc-proxy
- OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration
- OIDC_CLIENT_ID=your-client-id
- OIDC_CLIENT_SECRET=your-client-secret
- OIDC_BASE_URL=https://your-server.com
- ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/*
- EUNOMIA_TYPE=embedded
- EUNOMIA_POLICY_FILE=/app/mcp_policies.json
- ARCHIVEBOX_URL=https://yourinstance.archivebox.com
- ARCHIVEBOX_USERNAME=user
- ARCHIVEBOX_PASSWORD=pass
- ARCHIVEBOX_TOKEN=token
- ARCHIVEBOX_API_KEY=api_key
- ARCHIVEBOX_SSL_VERIFY=False
ports:
- 8004:8004
volumes:
- ./mcp_policies.json:/app/mcp_policies.jsonRun the service:
docker-compose up -dConfigure mcp.json for AI Integration
Recommended: Store secrets in environment variables with lookup in the JSON file.
For Testing Only: Plain text storage will also work, although not recommended.
{
"mcpServers": {
"archivebox": {
"command": "uv",
"args": [
"run",
"--with",
"archivebox-api",
"archivebox-mcp",
"--transport",
"${TRANSPORT}",
"--host",
"${HOST}",
"--port",
"${PORT}",
"--auth-type",
"${AUTH_TYPE}",
"--eunomia-type",
"${EUNOMIA_TYPE}"
],
"env": {
"ARCHIVEBOX_URL": "https://yourinstance.archivebox.com",
"ARCHIVEBOX_USERNAME": "user",
"ARCHIVEBOX_PASSWORD": "pass",
"ARCHIVEBOX_TOKEN": "token",
"ARCHIVEBOX_API_KEY": "api_key",
"ARCHIVEBOX_VERIFY": "False",
"TOKEN_JWKS_URI": "${TOKEN_JWKS_URI}",
"TOKEN_ISSUER": "${TOKEN_ISSUER}",
"TOKEN_AUDIENCE": "${TOKEN_AUDIENCE}",
"OAUTH_UPSTREAM_AUTH_ENDPOINT": "${OAUTH_UPSTREAM_AUTH_ENDPOINT}",
"OAUTH_UPSTREAM_TOKEN_ENDPOINT": "${OAUTH_UPSTREAM_TOKEN_ENDPOINT}",
"OAUTH_UPSTREAM_CLIENT_ID": "${OAUTH_UPSTREAM_CLIENT_ID}",
"OAUTH_UPSTREAM_CLIENT_SECRET": "${OAUTH_UPSTREAM_CLIENT_SECRET}",
"OAUTH_BASE_URL": "${OAUTH_BASE_URL}",
"OIDC_CONFIG_URL": "${OIDC_CONFIG_URL}",
"OIDC_CLIENT_ID": "${OIDC_CLIENT_ID}",
"OIDC_CLIENT_SECRET": "${OIDC_CLIENT_SECRET}",
"OIDC_BASE_URL": "${OIDC_BASE_URL}",
"REMOTE_AUTH_SERVERS": "${REMOTE_AUTH_SERVERS}",
"REMOTE_BASE_URL": "${REMOTE_BASE_URL}",
"ALLOWED_CLIENT_REDIRECT_URIS": "${ALLOWED_CLIENT_REDIRECT_URIS}",
"EUNOMIA_TYPE": "${EUNOMIA_TYPE}",
"EUNOMIA_POLICY_FILE": "${EUNOMIA_POLICY_FILE}",
"EUNOMIA_REMOTE_URL": "${EUNOMIA_REMOTE_URL}"
},
"timeout": 200000
}
}
}CLI Parameters
The archivebox-mcp command supports the following CLI options for configuration:
--transport: Transport method (stdio,http,sse) [default:http]--host: Host address for HTTP transport [default:0.0.0.0]--port: Port number for HTTP transport [default:8000]--auth-type: Authentication type (none,static,jwt,oauth-proxy,oidc-proxy,remote-oauth) [default:none]--token-jwks-uri: JWKS URI for JWT verification--token-issuer: Issuer for JWT verification--token-audience: Audience for JWT verification--oauth-upstream-auth-endpoint: Upstream authorization endpoint for OAuth Proxy--oauth-upstream-token-endpoint: Upstream token endpoint for OAuth Proxy--oauth-upstream-client-id: Upstream client ID for OAuth Proxy--oauth-upstream-client-secret: Upstream client secret for OAuth Proxy--oauth-base-url: Base URL for OAuth Proxy--oidc-config-url: OIDC configuration URL--oidc-client-id: OIDC client ID--oidc-client-secret: OIDC client secret--oidc-base-url: Base URL for OIDC Proxy--remote-auth-servers: Comma-separated list of authorization servers for Remote OAuth--remote-base-url: Base URL for Remote OAuth--allowed-client-redirect-uris: Comma-separated list of allowed client redirect URIs--eunomia-type: Eunomia authorization type (none,embedded,remote) [default:none]--eunomia-policy-file: Policy file for embedded Eunomia [default:mcp_policies.json]--eunomia-remote-url: URL for remote Eunomia server
Middleware
The MCP server includes the following built-in middleware for enhanced functionality:
ErrorHandlingMiddleware: Provides comprehensive error logging and transformation.
RateLimitingMiddleware: Limits request frequency with a token bucket algorithm (10 requests/second, burst capacity of 20).
TimingMiddleware: Tracks execution time of requests.
LoggingMiddleware: Logs all requests and responses for observability.
Eunomia Authorization
The server supports optional Eunomia authorization for policy-based access control:
Disabled (
none): No authorization checks.Embedded (
embedded): Runs an embedded Eunomia server with a local policy file (mcp_policies.jsonby default).Remote (
remote): Connects to an external Eunomia server for centralized policy decisions.
To configure Eunomia policies:
# Initialize a default policy file
eunomia-mcp init
# Validate the policy file
eunomia-mcp validate mcp_policies.jsonA2A CLI
Endpoints
Web UI:
http://localhost:8000/(if enabled)A2A:
http://localhost:8000/a2a(Discovery:/a2a/.well-known/agent.json)AG-UI:
http://localhost:8000/ag-ui(POST)
Short Flag | Long Flag | Description |
-h | --help | Display help information |
--host | Host to bind the server to (default: 0.0.0.0) | |
--port | Port to bind the server to (default: 9000) | |
--reload | Enable auto-reload | |
--provider | LLM Provider: 'openai', 'anthropic', 'google', 'huggingface' | |
--model-id | LLM Model ID (default: nvidia/nemotron-3-super) | |
--base-url | LLM Base URL (for OpenAI compatible providers) | |
--api-key | LLM API Key |
| | --mcp-url | MCP Server URL (default: http://localhost:8000/mcp) | | | --web | Enable Pydantic AI Web UI | False (Env: ENABLE_WEB_UI) |
Install Python Package
python -m pip install archivebox-api[all]Repository Owners
Available Tools
18 toolsarchivebox_check_api_tokenCheck api tokenA
Validate an API token to make sure it's valid and non-expired
Args: token: The API token to validate.
Returns: Response: The response object from the POST request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose that this is not read-only, is open-world, is not idempotent, and is not destructive. The description adds useful context by stating that it makes a POST request and can raise ParameterError, though it does not detail side effects, authentication requirements, or rate limits.
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 first sentence is front-loaded and clear, and the docstring-style Args/Returns/Raises sections are compact. The Returns section is somewhat vague, but there is little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter validation tool with no output schema, the description explains the input and mentions a POST response and ParameterError. However, it does not explain what a successful or failed validation response looks like, which is important for an agent to interpret 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?
Schema description coverage is 0%, so the description carries the burden for the single token parameter. It identifies the parameter as the API token to validate, but adds no format, source, or expiration-related semantics beyond the parameter 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?
The description states a specific verb and resource: validate an API token. It also clarifies that validation covers validity and non-expiration, which distinguishes it from sibling tools such as archivebox_get_api_token.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when an agent needs to check whether an API token is valid and non-expired, but it does not explicitly state when to use this tool versus alternatives or mention any preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_cli_addCli addB
Execute archivebox add command
Args: urls: List of URLs to archive. tag: Comma-separated tags. depth: Crawl depth. update: Update existing snapshots. update_all: Update all snapshots. index_only: Index without archiving. overwrite: Overwrite existing files. init: Initialize collection if needed. extractors: Comma-separated list of extractors to use. parser: Parser type. extra_data: Additional parameters as a dictionary.
Returns: Response: The response object from the POST request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| init | No | ||
| urls | Yes | ||
| depth | No | ||
| parser | No | auto | |
| update | No | ||
| overwrite | No | ||
| extra_data | No | ||
| extractors | No | ||
| index_only | No | ||
| update_all | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds only that it raises ParameterError on invalid input and returns the POST response object; it does not disclose auth requirements, duplicate-URL handling, or what side effects occur on the collection.
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 raw docstring dump with Args/Returns/Raises boilerplate; the purpose line is front-loaded, but the heading scaffolding and one-line-per-parameter format add little beyond a flat list. Content density is acceptable for 11 parameters, though not optimized for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no output schema, the description covers parameters and one error type but omits usage context, authentication, and side-effect/duplicate behavior. It is adequate as a signature reference but thin as invocation guidance.
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 0% schema description coverage across 11 parameters, the description is the sole source of parameter meaning and it covers every one (tag, depth, update, update_all, index_only, overwrite, init, extractors, parser, extra_data). The glosses are terse and partly tautological ('depth: Crawl depth', 'update: Update existing snapshots'), but they still add semantics the bare schema lacks.
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 ('Execute archivebox add command') and clarifies the target via 'urls: List of URLs to archive,' so an agent knows this archives URLs. It does not distinguish itself from siblings like archivebox_ingest_snapshots or archivebox_cli_update, which is the only gap.
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 statement of when to use this tool versus the many siblings (cli_update, cli_list, cli_remove, ingest_snapshots). The reader must infer from the name alone that this is the ingestion entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_cli_listCli listC
Execute archivebox list command
Args: filter_patterns: List of filter patterns. filter_type: Filter type. status: Filter by status. after: Filter snapshots after timestamp. before: Filter snapshots before timestamp. sort: Sort field. as_json: Output as JSON. as_html: Output as HTML. as_csv: Output as CSV or fields to include. with_headers: Include headers in output. extra_data: Additional parameters as a dictionary.
Returns: Response: The response object from the POST request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | bookmarked_at | |
| after | No | ||
| as_csv | No | timestamp,url | |
| before | No | ||
| status | No | indexed | |
| as_html | No | ||
| as_json | No | ||
| extra_data | No | ||
| filter_type | No | substring | |
| with_headers | No | ||
| filter_patterns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and idempotentHint=false for what presents as a list operation, an unusual profile the description never addresses. The description adds only a generic Raises note and a vague 'Response object from the POST request', leaving the mutation risk and return behavior unexplained.
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 Args/Returns/Raises structure is scannable and the one-line purpose is front-loaded, but the parameter lines are repetitive filler that could be compressed. Neither wasteful nor tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An 11-parameter tool with no output schema, near-zero annotation detail, and no explanation of what is listed, whether filters combine, or how output format flags interact. The Returns block ('The response object from the POST request') leaves the agent unable to predict 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?
With 0% schema description coverage, the description must carry all 11 parameters, and it does list them. However most glosses merely restate the name ('filter_type: Filter type', 'sort: Sort field', 'as_json: Output as JSON'), and only a few ('after/before: snapshots after/before timestamp', 'as_csv: CSV or fields to include', 'extra_data') add meaning. Partial compensation only.
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 and resource ('Execute archivebox list command') but the object of the listing is never named (snapshots? archiveresults?), and it does not distinguish itself from sibling list-like tools such as archivebox_get_snapshots or archivebox_get_any. The purpose is inferable but not sharp.
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 condition selecting this over archivebox_get_snapshots, and no note on prerequisites or the fact that all 11 parameters default so the call is safe with no arguments. The agent must guess its place among 17 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_cli_removeCli removeCDestructive
Execute archivebox remove command
Args: delete: Delete matching snapshots. after: Filter snapshots after timestamp. before: Filter snapshots before timestamp. filter_type: Filter type. filter_patterns: List of filter patterns. extra_data: Additional parameters as a dictionary.
Returns: Response: The response object from the POST request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| before | No | ||
| delete | No | ||
| extra_data | No | ||
| filter_type | No | exact | |
| filter_patterns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so the destructive/safety profile is covered. The description adds the POST-request and ParameterError context, but omits critical behavioral facts such as that delete defaults to true (irreversible by default), whether removal can be undone, and any auth/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Args/Returns/Raises structure is clean and the purpose is front-loaded, but several lines restate the parameter name without adding information, so the section is padded rather than dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, six-parameter tool with no output schema and zero schema descriptions, the definition is too thin: it does not clarify the default-delete behavior, what the returned response contains, or authentication needs. Annotations cover destructiveness, but the parameter and behavioral gaps leave the agent under-informed for a risky operation.
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 carry all six parameters, but most entries are tautological ('filter_type: Filter type', 'extra_data: Additional parameters as a dictionary'). It never explains the dangerous default of delete=true, the meaning of filter_type values (default 'exact'), or the timestamp units/format for after/before.
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+resource ('Execute archivebox remove command') and the Args list hints that it deletes matching snapshots, so the agent can infer it is the deletion counterpart to archivebox_cli_add/cli_list. However, it never explicitly says what is being removed (snapshots) or how it differs from sibling archivebox tools, relying on the name to carry that load.
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 or when-not-to-use guidance and no mention of alternatives among the many siblings (cli_add, cli_list, cli_update, get_snapshots). The only usage signal is the implicit 'remove' semantics of the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_cli_scheduleCli scheduleC
Execute archivebox schedule command
Args: import_path: Path to import file. add: Enable adding new URLs. every: Schedule frequency. tag: Comma-separated tags. depth: Crawl depth. overwrite: Overwrite existing files. update: Update existing snapshots. clear: Clear existing schedules. extra_data: Additional parameters as a dictionary.
Returns: Response: The response object from the POST request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | ||
| tag | No | ||
| clear | No | ||
| depth | No | ||
| every | No | ||
| update | No | ||
| overwrite | No | ||
| extra_data | No | ||
| import_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=false, but the description explicitly advertises 'clear: Clear existing schedules' and 'overwrite: Overwrite existing files', which are non-additive/destructive operations. This directly contradicts the destructiveHint annotation, so it is flagged as a contradiction.
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?
Uses a clear Args/Returns/Raises structure with the command front-loaded, and the length is reasonable for nine parameters. It is somewhat formulaic, but every line carries some 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 nine-parameter, zero-schema-coverage command with no output schema, the definition is missing what the schedule operation actually does, required permissions, argument formats, and return structure. The brief Returns line names only 'Response object' and does not compensate for the absent output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source for parameter meaning. It lists all nine parameters with brief glosses, but leaves key formats undefined: 'every: Schedule frequency', 'depth: Crawl depth', and 'extra_data: Additional parameters as a dictionary' do not give enough information to invoke those fields correctly.
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 'Execute archivebox schedule command', a specific verb plus command, but only restates the tool name/title and never explains what scheduling does. It differentiates from non-CLI siblings only by the command name, and provides no domain-level description of creating or managing archive schedules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance or alternatives; it is only an argument list. It never says when to choose this over archivebox_cli_add, archivebox_cli_update, or the non-CLI sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_cli_updateCli updateC
Execute archivebox update command
Args: resume: Resume from timestamp. only_new: Update only new snapshots. index_only: Index without archiving. overwrite: Overwrite existing files. after: Filter snapshots after timestamp. before: Filter snapshots before timestamp. status: Filter by status. filter_type: Filter type. filter_patterns: List of filter patterns. extractors: Comma-separated list of extractors. extra_data: Additional parameters as a dictionary.
Returns: Response: The response object from the POST request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| before | No | ||
| resume | No | ||
| status | No | unarchived | |
| only_new | No | ||
| overwrite | No | ||
| extra_data | No | ||
| extractors | No | ||
| index_only | No | ||
| filter_type | No | substring | |
| filter_patterns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, non-idempotent, open-world operation, so safety basics are covered. The description adds that it issues a POST request and raises ParameterError, which is useful, but it never says what gets modified, what overwrite actually replaces, or what permissions are needed.
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 structured docstring (Args/Returns/Raises) with the purpose front-loaded and appropriately sized for 11 parameters. Still, several Args lines are filler that restate the parameter name, so not every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no output schema and only annotation-level safety hints, the description leaves major gaps: it never explains the effect of the update on snapshots, how filters combine, or what the response contains beyond 'the response object from the POST request'.
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 11 parameters, so the description must carry the load, and it does list every parameter. However several glosses are pure tautologies ('status: Filter by status', 'filter_type: Filter type', 'extractors: Comma-separated list of extractors'), giving no format, timestamp units, or expected values beyond what the bare schema shows.
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 it runs the 'archivebox update' CLI command, which is essentially a restatement of the tool name/title, but the Args list hints at the actual work (re-archiving, indexing, filtering snapshots). It offers no differentiation from siblings such as archivebox_ingest_snapshots or archivebox_cli_add, so an agent cannot tell from the text alone what makes 'update' distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not-to-use, or alternative guidance. The argument names imply scenarios (resume, only_new, status filters) but the agent must infer them; nothing routes it between this tool and the ingest/list/add siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_get_anyGet anyBRead-onlyIdempotent
Get a specific Snapshot, ArchiveResult, or Tag by abid
Args: abid: The abid of the Snapshot, ArchiveResult, or Tag.
Returns: Response: The response object from the GET request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| abid | 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 one useful behavioral note (raises ParameterError on invalid parameters), but 'Response object from the GET request' is a non-statement about behavior and no pagination/error/rate-limit context is offered beyond that single raise clause.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded single sentence with the lookup key named up top, followed by brief Args/Returns/Raises blocks. The Returns line is filler, but the overall size is appropriate and non-redundant.
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 one-parameter read tool with rich annotations and no output schema needs little, and the description is minimally adequate. The notable gap is the abid semantics and the missing rationale for this generic tool versus its type-specific siblings, which is what an agent most needs here.
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 for the abid parameter. It only restates the parameter name/title ('The abid of the Snapshot, ArchiveResult, or Tag') without giving format, expected value shape, or how to obtain an abid, which is the key ambiguity for an opaque identifier.
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 (Get) and resource set (Snapshot, ArchiveResult, or Tag) qualified by the lookup key (abid), so the agent knows exactly what the call retrieves. It does not, however, explain how this generic tool relates to the more specific siblings (archivebox_get_snapshot, archivebox_get_tag, archivebox_get_archiveresult), leaving the differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. With dedicated sibling getters for each type, the agent has no stated reason for choosing archivebox_get_any over them, nor any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_get_api_tokenGet api tokenB
Generate an API token for a given username & password
Args: username: The username for authentication. password: The password for authentication.
Returns: Response: The response object from the POST request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | ||
| username | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the key traits (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false). The description adds that it performs a POST and raises ParameterError for invalid params, which is useful, but it omits whether generating a token invalidates prior tokens, how credentials are obtained, or any rate/expiry 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?
The purpose is front-loaded in the first sentence, which is good, but the Args/Returns/Raises boilerplate is padded and the Returns line ('response object from the POST request') conveys little given there is no output schema to lean on.
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?
Bar is lower here: annotations carry the safety profile, and with only two simple credential parameters there is limited surface to cover. The gaps - no alternative-tool routing and no clarity on token lifecycle or invalid-credential behavior beyond ParameterError - are real but modest for this tool's complexity.
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 carry the load, and it barely does: 'username: The username for authentication' and 'password: ... for authentication' are near-tautological. It identifies both as auth credentials but adds no format, sourcing, or nullability meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Generate an API token) and resource (token for a username & password), so an agent understands what it produces. It does not, however, distinguish itself from the close sibling archivebox_check_api_token, nor does it reconcile the 'get' name with the 'generate' behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of when not to use it. The very relevant alternative archivebox_check_api_token exists in the sibling set but is never referenced, leaving the agent to guess which token tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_get_archiveresultGet archiveresultBRead-onlyIdempotent
Get a specific ArchiveResult by id or abid
Args: archiveresult_id: The ID or abid of the ArchiveResult.
Returns: Response: The response object from the GET request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| archiveresult_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds limited context: it reports a ParameterError for invalid parameters and says the return is the GET response object, but it does not describe auth, rate limits, or response shape.
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 key purpose is front-loaded in the first sentence, and the Args/Returns/Raises structure is easy to scan. The Returns line is somewhat tautological ('The response object from the GET request'), but overall the definition is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with annotations, this is close to sufficient. However, with no output schema, the description does not explain the returned ArchiveResult fields or structure, and the error behavior is only minimally described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It does clarify that archiveresult_id accepts either 'id or abid', which adds value beyond the schema's plain string type, but it does not explain the distinction or provide format examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get a specific ArchiveResult by id or abid.' This distinguishes it from a bulk list operation, though it does not explicitly name the sibling archivebox_get_archiveresults as the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase 'specific ArchiveResult by id or abid' – an agent can infer this is for fetching one known record. There is no explicit guidance on when to use this versus archivebox_get_archiveresults, archivebox_get_any, or related lookup tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_get_archiveresultsGet archiveresultsBRead-onlyIdempotent
List all ArchiveResult entries matching these filters
Args: id: Filter by ID. search: Search across snapshot url, title, tags, extractor, output, id. snapshot_id: Filter by snapshot ID. snapshot_url: Filter by snapshot URL. snapshot_tag: Filter by snapshot tag. status: Filter by status. output: Filter by output. extractor: Filter by extractor. cmd: Filter by command. pwd: Filter by working directory. cmd_version: Filter by command version. created_at: Filter by exact creation date (ISO 8601 format). created_at__gte: Filter by creation date >= (ISO 8601 format). created_at__lt: Filter by creation date < (ISO 8601 format). limit: Number of results to return. offset: Offset for pagination. page: Page number for pagination. api_key: API key for QueryParamTokenAuth (optional).
Returns: Response: The response object from the GET request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| cmd | No | ||
| pwd | No | ||
| page | No | ||
| limit | No | ||
| offset | No | ||
| output | No | ||
| search | No | ||
| status | No | ||
| api_key | No | ||
| extractor | No | ||
| created_at | No | ||
| cmd_version | No | ||
| snapshot_id | No | ||
| snapshot_tag | No | ||
| snapshot_url | No | ||
| created_at__lt | No | ||
| created_at__gte | No |
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 only that it may raise ParameterError and that api_key is for QueryParamTokenAuth — mildly useful context but no detail on pagination behavior, auth requirements, or result shape.
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 first line is front-loaded and useful, but the body is autogenerated docstring boilerplate where roughly half the lines restate the parameter name. 'Returns: Response: The response object from the GET request' is pure filler that consumes space without informing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter, no-required-parameter listing tool with no output schema, the definition should explain what an ArchiveResult contains and what values status/extractor accept. It covers parameter names but not semantics or return shape; the annotations partially compensate by confirming this is a safe, idempotent read.
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 18 parameters, so the description carries the full burden. It does enumerate every parameter, and a few entries add real meaning ('search across snapshot url, title, tags, extractor, output, id'; ISO 8601 for the created_at variants; limit/offset/page semantics). But many are tautological restatements ('status: Filter by status', 'output: Filter by output', 'cmd: Filter by command'), and no valid values are given for status, extractor, or cmd, which is the information an agent actually needs to filter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line gives a clear verb and resource: 'List all ArchiveResult entries matching these filters,' which distinguishes it from the singular archivebox_get_archiveresult and from snapshot/tag listers. It does not explicitly name a sibling or state the boundary condition, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this list endpoint versus archivebox_get_archiveresult (singular fetch) or the snapshot variants. The body is a parameter enumeration with no context, alternatives, or prerequisites, so an agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_get_snapshotGet snapshotBRead-onlyIdempotent
Get a specific Snapshot by abid or id
Args: snapshot_id: The ID or abid of the snapshot. with_archiveresults: Whether to include archiveresults.
Returns: Response: The response object from the GET request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot_id | Yes | ||
| with_archiveresults | No |
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 only the error behavior (ParameterError on invalid params) and a vague note that the result comes from a GET request; it does not mention auth requirements or what a missing snapshot yields.
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?
Short and front-loaded, with the core purpose in the first sentence and Args/Raises sections that are tight. The Returns line ('The response object from the GET request') is essentially a tautology but costs only one line.
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 should describe the returned snapshot; instead it only says it is the GET response object, which tells the agent nothing about the payload. For a simple two-parameter read with annotations covering the safety profile, this is adequate but leaves the return value and auth expectations unexplained.
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 schema description coverage at 0%, the description carries the full burden and does document both parameters: snapshot_id as 'The ID or abid', and with_archiveresults as a flag for including archive results. The meanings added are real but thin, and the default value of with_archiveresults is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource – 'Get a specific Snapshot by abid or id' – which distinguishes it from the plural list-style sibling archivebox_get_snapshots. It does not explicitly name or contrast with other retrieval siblings such as archivebox_get_any or archivebox_get_archiveresult, so it stops short of full sibling differentiation.
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. The agent is not told when to pick this over archivebox_get_any or archivebox_get_snapshots, nor when the id vs abid form applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_get_snapshotsGet snapshotsARead-onlyIdempotent
Retrieve list of snapshots
Args: id: Filter by snapshot ID. abid: Filter by snapshot abid. created_by_id: Filter by creator ID. created_by_username: Filter by creator username. created_at__gte: Filter by creation date >= (ISO 8601 format). created_at__lt: Filter by creation date < (ISO 8601 format). created_at: Filter by exact creation date (ISO 8601 format). modified_at: Filter by exact modification date (ISO 8601 format). modified_at__gte: Filter by modification date >= (ISO 8601 format). modified_at__lt: Filter by modification date < (ISO 8601 format). search: Search across url, title, tags, id, abid, timestamp. url: Filter by URL (exact). tag: Filter by tag name (exact). title: Filter by title (icontains). timestamp: Filter by timestamp (startswith). bookmarked_at__gte: Filter by bookmark date >= (ISO 8601 format). bookmarked_at__lt: Filter by bookmark date < (ISO 8601 format). with_archiveresults: Include archiveresults in response. limit: Number of results to return. offset: Offset for pagination. page: Page number for pagination. api_key: API key for QueryParamTokenAuth (optional).
Returns: Response: The response object from the GET request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| tag | No | ||
| url | No | ||
| abid | No | ||
| page | No | ||
| limit | No | ||
| title | No | ||
| offset | No | ||
| search | No | ||
| api_key | No | ||
| timestamp | No | ||
| created_at | No | ||
| modified_at | No | ||
| created_by_id | No | ||
| created_at__lt | No | ||
| created_at__gte | No | ||
| modified_at__lt | No | ||
| modified_at__gte | No | ||
| bookmarked_at__lt | No | ||
| bookmarked_at__gte | No | ||
| created_by_username | No | ||
| with_archiveresults | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds optional api_key authentication and a ParameterError on invalid parameters, but does not describe rate limits or meaningful return behavior beyond a generic 'Response object'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the Args list is compact and structured. For 22 optional parameters the length is largely justified, though the Returns/Raises boilerplate adds minor noise.
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 22 optional parameters and no output schema, the description does well on parameter meaning but only says the return is a 'Response object' and does not explain response shape or pagination defaults. Annotations cover safety, but result semantics remain underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it documents all 22 parameters with useful filter semantics such as exact match, icontains, startswith, ISO 8601 date operators, and pagination fields. It still leaves the page/offset/limit relationship and the id vs abid distinction somewhat ambiguous, so it is not perfect.
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 ('Retrieve') and resource ('list of snapshots'), so the basic purpose is clear. It does not distinguish this tool from the singular sibling archivebox_get_snapshot or other get_* tools, so it falls short of full sibling differentiation.
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 filter arguments imply that this tool is for querying/filtering snapshots, but there is no explicit when-to-use guidance, no exclusions, and no named alternative such as archivebox_get_snapshot. The agent must infer the distinction from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_get_tagGet tagBRead-onlyIdempotent
Get a specific Tag by id or abid
Args: tag_id: The ID or abid of the tag. with_snapshots: Whether to include snapshots.
Returns: Response: The response object from the GET request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes | ||
| with_snapshots | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds that a ParameterError is raised on invalid parameters and hints that with_snapshots widens the response, but says nothing about auth requirements or what the response actually contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Args/Returns/Raises structure is front-loaded and compact, with no wasted prose. The Returns line is boilerplate-ish but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read lookup this is roughly adequate: parameters, error behavior and read-only nature are covered. But with no output schema, the vague 'response object from the GET request' leaves the return shape and the effect of with_snapshots underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the parameter burden, and it does document both parameters including the useful 'ID or abid' distinction. However it gives no format examples, defaults, or explanation of what including snapshots changes in the payload, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a specific Tag') and distinguishes the singular lookup from the plural sibling archivebox_get_tags by emphasizing 'a specific Tag by id or abid'. It is clear what the tool returns, though it never explicitly names the list alternative.
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 lookup versus archivebox_get_tags or archivebox_get_any. The 'id or abid' note is descriptive, not a usage condition or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_get_tagsGet tagsBRead-onlyIdempotent
Retrieve list of tags
Args: limit: Number of results to return. offset: Offset for pagination. page: Page number for pagination. api_key: API key for QueryParamTokenAuth (optional).
Returns: Response: The response object from the GET request.
Raises: ParameterError: If the provided parameters are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| offset | No | ||
| api_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds useful behavioral context: it is a GET request that requires optional api_key auth and raises ParameterError on invalid input. It does not describe pagination behavior or result shape.
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 Args block is compact and front-loaded, but the trailing 'Returns: Response: The response object from the GET request' is a tautological boilerplate line that adds no information, and the Raises line is only marginally useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should describe the returned tag list shape, and it does not ('The response object from the GET request' is empty). It does cover all four params and an error case, and annotations cover the safety profile, so it is adequate but with a clear gap on return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does supply a one-line gloss for all four params (limit, offset, page, api_key). These are minimal and omit units, defaults, or the relationship between offset and page, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve list of tags'), which cleanly distinguishes it from the singular archivebox_get_tag sibling. It does not, however, explicitly call out that distinction or scope (e.g. all tags vs. filtered), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of the sibling archivebox_get_tag for single-tag lookups, and no indication of when pagination is needed. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_ingest_archiveresultsArchivebox Ingest ArchiveresultsB
List ArchiveBox archive results and ingest them as :ArchiveResult nodes.
Best-effort: returns {"ingested": None} when no engine is reachable.
| Name | Required | Description | Default |
|---|---|---|---|
| params_json | No | JSON string of get_archiveresults filters (e.g. snapshot_id, extractor, status). | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses one failure mode ('best-effort', returns {"ingested": None} when no engine is reachable), which is real value beyond structured fields. However, it says nothing about the mutation itself: whether repeated ingestion is idempotent, whether it creates duplicate nodes, or what permissions/engine setup are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the degraded-return caveat second. No filler; only minor style noise from the RST-style double-backtick JSON.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still volunteers the no-engine case. The remaining gap is mutation semantics for a write tool with zero annotation coverage, which leaves the agent under-informed about side effects and repeat-call behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single params_json parameter is fully documented in the schema with filter examples. The description adds no filter syntax or format detail beyond that, so the baseline 3 for a schema-driven parameter applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb pair (list + ingest) and the exact resource and target node type (':ArchiveResult nodes'), so the agent knows what the tool produces. It does not explicitly differentiate itself from the sibling archivebox_get_archiveresults or archivebox_ingest_snapshots, leaving the ingest-vs-read distinction to be inferred from the name.
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. With siblings like archivebox_get_archiveresults (read-only listing) and archivebox_ingest_snapshots (a different ingest target) present, the description should say when ingestion is warranted and which sibling covers the plain read case, but it offers nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archivebox_ingest_snapshotsArchivebox Ingest SnapshotsA
List ArchiveBox snapshots and natively ingest them into epistemic-graph.
Pushes :Snapshot (+ :Tag + :hasTag) nodes and per-snapshot :Document page-text,
plus any nested :ArchiveResult links, via the fast engine client. Best-effort:
returns {"ingested": None} when no engine is reachable.
| Name | Required | Description | Default |
|---|---|---|---|
| params_json | No | JSON string of get_snapshots filters (e.g. tag, search, limit). | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses exactly which nodes are written (:Snapshot, :Tag, :hasTag, per-snapshot :Document page-text, nested :ArchiveResult links), the engine used ('fast engine client'), and the best-effort failure mode ({"ingested": None} when no engine is reachable). It omits auth requirements and idempotency/re-run semantics, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by write-target detail and a failure-mode note; every sentence carries information. Slightly dense with graph-node jargon but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values needn't be restated, and the description still flags the notable {"ingested": None} case. For a no-annotation ingest tool it covers what is written and how it fails, leaving only auth and repeat-run behavior unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and params_json is documented in-schema as 'JSON string of get_snapshots filters'. The description adds no filter syntax or examples beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific compound verb and resource: 'List ArchiveBox snapshots and natively ingest them into epistemic-graph.' This distinguishes it from sibling archivebox_get_snapshots (list only) and archivebox_ingest_archiveresults (different resource), so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb ('list and ingest'), but there is no explicit when-to-use, when-not, or named alternative among the many siblings. An agent must infer that this is the ingest path versus the plain get/list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_extractWeb ExtractBRead-onlyIdempotent
Fetch one web page and extract its main content as markdown with title, author, published date, canonical URL and outbound links.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | One page to fetch, with the caller's bounds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 useful output context (markdown extraction plus specific extracted fields) but says nothing about size limits (max_bytes), timeouts, rate limits, or failure 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?
A single front-loaded sentence with verb first and no wasted words. The extracted-field list earns its place by telling the caller what the markdown payload contains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be explained, and annotations cover safety, making the description adequate. The material gap is the absence of any disambiguation from the very similar web_fetch sibling, which is exactly what the description should carry.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents url, job_ref, max_bytes, timeout_s and accepted_types. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (fetch, extract) and resource (one web page), plus the output shape (markdown with title, author, published date, canonical URL, outbound links). However, it never differentiates from the obvious sibling web_fetch, so an agent cannot tell the two apart 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 guidance and no mention of the near-identical sibling web_fetch. The description implies use ('fetch one web page') but gives no condition for choosing this tool over alternatives or when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_fetchWeb FetchARead-onlyIdempotent
Fetch one web page under the web-source contract: robots.txt, a per-domain rate limit, max_bytes and accepted_types. text_markdown holds the page body as text.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | One page to fetch, with the caller's bounds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive behavior, but the description adds operationally meaningful context not in the annotations: robots.txt compliance and a per-domain rate limit. It omits what happens on rate-limit violation or fetch failure, so it is not fully transparent.
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 compact, front-loaded sentences with no filler. The final clause about text_markdown is slightly redundant given an output schema exists, but the overall shape is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and the nested 'request' object is fully documented in the schema. The fetcher's contract (robots, rate limit, size/type bounds) is covered well enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents url, max_bytes, accepted_types, timeout_s and job_ref. The description names max_bytes and accepted_types but adds no format, unit, or limit semantics beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch one web page'), and the phrase 'under the web-source contract' plus the accepted_types/max_bytes scope make it distinct from extraction-oriented siblings like web_extract. It stops short of naming that sibling outright, so it is clear but not fully differentiated.
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?
'Fetch one web page' implies the usage context (retrieving raw page content rather than extracting structured data), but there is no explicit when-to-use, when-not-to-use, or named alternative. Guidance is only implied.
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.
21 tool updates
v2.5.1- Removed
archivebox_authentication - Added
archivebox_check_api_token - Removed
archivebox_cli - Added
archivebox_cli_add - Added
archivebox_cli_list - Added
archivebox_cli_remove - Added
archivebox_cli_schedule - Added
archivebox_cli_update - Removed
archivebox_core - Added
archivebox_get_any - Added
archivebox_get_api_token - Added
archivebox_get_archiveresult - Added
archivebox_get_archiveresults - Added
archivebox_get_snapshot - Added
archivebox_get_snapshots - Added
archivebox_get_tag - Added
archivebox_get_tags - Added
archivebox_ingest_archiveresults - Added
archivebox_ingest_snapshots - Added
web_extract - Added
web_fetch
15 tool updates
v0.11.1- Added
archivebox_authentication - Added
archivebox_cli - Added
archivebox_core - Removed
check_api_token - Removed
cli_add - Removed
cli_list - Removed
cli_remove - Removed
cli_schedule - Removed
cli_update - Removed
get_any - Removed
get_api_token - Removed
get_archiveresults - Removed
get_snapshot - Removed
get_snapshots - Removed
get_tag
12 tool updates
- First observed
check_api_token - First observed
cli_add - First observed
cli_list - First observed
cli_remove - First observed
cli_schedule - First observed
cli_update - First observed
get_any - First observed
get_api_token - First observed
get_archiveresults - First observed
get_snapshot - First observed
get_snapshots - First observed
get_tag
TDQS
Scored across 18 tools
There is real overlap across the set: singular/plural pairs (get_snapshot vs get_snapshots, get_tag vs get_tags, get_archiveresult vs get_archiveresults) are easy to confuse, get_any duplicates the three specific getters, cli_list overlaps with the get_* list endpoints, and web_fetch vs web_extract both fetch a page. Descriptions help clarify intent, but boundaries are not crisp.
Most tools follow a clean archivebox_verb_noun snake_case pattern (archivebox_get_snapshot, archivebox_cli_add). Minor deviations exist: the archivebox_cli_* middle segment and the two web_-prefixed tools (web_fetch, web_extract) break the otherwise uniform namespace, but the convention is still clearly readable.
18 tools is slightly on the heavy side but each maps to a genuine ArchiveBox operation (per-resource get/list, CLI commands, ingest, token auth). The set is defensible for an API wrapper, though cli_list and get_any are somewhat redundant additions.
Coverage is solid: read/list for snapshots, archiveresults and tags, creation via cli_add, removal via cli_remove, updates via cli_update, plus scheduling, token management and graph ingestion. Direct create/update/delete for tags is absent, but tags are typically managed indirectly through snapshots, so this is a minor gap.
Maintenance
Related MCP Connectors
Archive MCP — wraps the Internet Archive APIs (free, no auth)
Search the Wayback Machine and IA library (40M+ items), fetch snapshots, item metadata, and text.
Convert public web pages to PDF, images, Markdown, or JSON using one API key.
Capture web pages as cryptographically signed, tamper-evident evidence with WACZ archives.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with the Internet Archive's Wayback Machine to save web pages, retrieve archived versions, search historical snapshots, and check archive statistics without requiring API keys.888 npmCreative Commons Attribution Non Commercial Share Alike 4.0 International
- AlicenseAqualityCmaintenanceProvides tools to archive URLs, retrieve clean readable text from Wayback Machine snapshots, list snapshots, search Internet Archive items, and compare snapshots, designed to avoid context window blowup by returning stripped text.65 npmMIT

siteglass-mcpofficial
AlicenseNot gradedqualityCmaintenanceEnables archival of any public URL as interactive snapshot (rrweb, PDF, PNG) and autonomous web QA for apps (register, scan, generate and run end-to-end flows).77 npmMIT- AlicenseAqualityAmaintenanceMCP server and CLI tool for interacting with the Internet Archive's Wayback Machine, supporting full CDX search, snapshot retrieval, screenshot listing, snapshot comparison, and optional authentication.8888 npm61Creative Commons Attribution Non Commercial Share Alike 4.0 International