Skip to main content
Glama

Attach an artifact to a task

add_artifact

Step 4 of the Tango working agreement (work in the open). Attach every concrete output — notes, drafts, results, files, links — as an artifact so it's part of the task record, not just chat. Real files (pdf, docx, pptx, xlsx, mp3, wav, m4a, images…) are supported: pass content_base64 for files up to ~6 MB, fetch_url to have Tango download and store a hosted file itself, or call create_artifact_upload first for large files and finalize here with upload_token. content stays the path for inline text and external_url for a link you only want recorded. Reference artifact ids in complete_task's evidence_artifact_ids. If a lease is active, Tango attributes the artifact to the lease holder. Otherwise, pass acting_worker_id to identify which of your workers is acting; if you don't own that worker the attribution is dropped rather than misrecorded. Attested workers may pass worker_signature over the JCS-canonical artifact payload (type 'tango.artifact'); an invalid signature rejects the call and nothing is stored. Delegated workers are signed for automatically.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesFilename or artifact label. Keep the real extension (.pptx, .pdf, .mp3) so the type is detected.
contentNoInline text content.
task_idYesTask id, or a pasted Tango task URL.
fetch_urlNoAn https URL Tango downloads and stores as a durable copy (up to 50 MB). Use this when the file is already hosted somewhere.
mime_typeNoMIME type. Optional — Tango sniffs the real type from the bytes.
worker_kidNokid of the registered key that produced worker_signature.
external_urlNoOr, a publicly reachable https URL to an externally hosted artifact (recorded as a link; Tango does not copy it). Never a file:// path or a path on your own machine — upload those bytes instead.
upload_tokenNoFinalize a signed upload: the upload_token returned by create_artifact_upload, after you PUT the bytes to its upload_url.
evidence_kindNoWhat kind of proof this output is. Tasks can require specific kinds before completion is accepted — get_task shows the checklist. Left unset, Tango infers it from the file type where it can.
content_base64NoBase64-encoded file bytes for binary artifacts (pptx, docx, pdf, mp3, wav, m4a, images…). Up to ~6 MB decoded; larger files use create_artifact_upload.
acting_worker_idNoOptional. Self-asserted worker performing this action. Ignored if a lease is active (lease holder wins). Verified against caller ownership.
transparency_seqNoTransparency anchor seq you signed.
worker_signatureNoAttested mode only. Detached JWS ('header..signature') over the JCS-canonical artifact payload. See /verify.
worker_signed_atNoThe exact `signed_at` inside the signed payload (ISO 8601).
transparency_hashNoTransparency anchor hash you signed.

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the sparse annotations (readOnlyHint=false, destructiveHint=false). It discloses that Tango downloads and stores fetch_url files, that external_url is not copied, that invalid signatures reject the call with nothing stored, and that delegated workers are signed for automatically. It also explains the subtle attribution behavior: if you don't own the worker, attribution is dropped rather than misrecorded.

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

Conciseness4/5

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

The description is dense but each sentence earns its place, covering purpose, content modes, attribution, and signing behavior. It is front-loaded with the working-agreement context. The only minor issue is that it reads as one long block; bulleted mode routing would improve scannability without adding length.

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

Completeness4/5

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

For a tool with 15 parameters and multiple content modes, the description covers nearly everything an agent needs: all storage modes, size limits, attribution, signing, and the relation to complete_task. The main gap is that it does not describe the success response or returned artifact id, and it does not mention evidence_kind selection beyond a passing reference, though the schema documents that parameter.

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

Parameters5/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds significant meaning: size limits for content_base64 vs fetch_url, the role of upload_token as a finalize step after create_artifact_upload, the distinction between stored content and merely recorded external links, and the JCS-canonical payload requirement for worker_signature. These semantics are not inferable from the schema alone.

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

Purpose5/5

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

The description states a precise verb-resource pair ('Attach every concrete output ... as an artifact') and clearly scopes what qualifies: notes, drafts, results, files, links. It also differentiates the tool from chat-oriented siblings by saying the artifact should be 'part of the task record, not just chat', and from create_artifact_upload by describing the upload-token handoff.

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

Usage Guidelines5/5

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

The description gives explicit mode routing: content_base64 for files up to ~6 MB, fetch_url for hosted files up to 50 MB, create_artifact_upload plus upload_token for large files, content for inline text, and external_url for links only recorded. It also tells the agent when attribution logic changes (lease active vs acting_worker_id) and directs artifact ids into complete_task's evidence_artifact_ids.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.7/5.0
Disambiguation3/5

Most tools target a distinct resource and action, but several adjacent pairs are easy to confuse: add_comment vs add_progress_note, call_executor vs call_integration, log_client_decision vs update_client_context vs memory_save, and list_context_sources vs list_integrations. The descriptions do disambiguate them, but the boundaries are subtle enough that misselection is likely with 81 tools.

Naming Consistency4/5

The overwhelming majority follow a clear verb_noun snake_case pattern (create_task, update_project, list_integrations, set_webhook), and get_/ list_/ create_/ update_ families are predictable. Minor deviations exist: memory_read/memory_save/memory_search invert to object_verb, and bare nouns like whoami, glossary, and security_posture break the pattern, but there is no chaotic casing or mixed conventions.

Tool Count2/5

At 81 tools, this is far above the weight that is comfortable for an agent's tool-selection surface, especially since many tools belong to families that could be consolidated (webhooks, worker keys, project logs, context/memory). Although the domain is broad, the count will overwhelm agents and increase misrouting.

Completeness4/5

The surface is unusually comprehensive: tasks, projects, workers, leases, artifacts, comments, handoffs, webhooks, keys, context, memory, integrations, and support all have create/read/update/delete or equivalent lifecycle coverage. The gaps are minor, such as remove_dependency without a visible add_dependency and no artifact/comment deletion, but agents can work around them.

Resources