# org.filetourl/mcp

> Upload a file and get a public shareable URL via API or MCP.

- name: org.filetourl/mcp
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 73/100 flags: no-repository
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/org.filetourl%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/org.filetourl%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "filetourl": {
      "type": "http",
      "url": "https://filetourl.org/api/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 65
- provenance: 45
- drivers: +dns-namespace +reachable +uptime-100% ~updated-105d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: start_upload (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); upload_chunk (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); create_upload_url (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 811 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 811 tokens to load them all
- tool set hash: b05ba8c73f9facae25ce5c93c655a994
- badge: [![protogrid quality](https://protogrid.dev/badge/org.filetourl/mcp.svg)](https://protogrid.dev/servers/org.filetourl/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://filetourl.org/api/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `confirm_upload`: Optional. Confirm that the PUT to a create_upload_url upload_url finished, and get the final size and link back. The link also activates without this call, this just verifies it.
- `create_upload_url`: Preferred way to host a file. Reserves a link and returns a short-lived upload_url on filetourl.org itself, safe for AI agent sandboxes that only allow egress to trusted domains, since the upload never has to leave filetourl.org. Send the raw file bytes yourself with a single HTTP PUT to that URL (do not read the file into this conversation, and do not base64-encode it). The public_url returned works as soon as the PUT succeeds. Needs a FileToUrl Developer API key.
- `finish_upload`: Complete a chunked upload after all chunks have been sent via upload_chunk. Assembles the file, uploads it, and returns the shareable URL.
- `get_file_status`: Look up whether a link created earlier is still active. Reports 'pending' for a reserved upload whose bytes have not arrived yet, and 'expired' once its upload window has passed.
- `start_upload`: Begin a chunked upload for larger files. Returns an upload_id and recommended chunk size. Use this instead of upload_file for files over ~2MB.
- `upload_chunk`: Send one chunk of a file started with start_upload. Call repeatedly with increasing chunk_index (starting at 0) until the whole file is sent, then call finish_upload.
- `upload_file`: Host a small file by sending its bytes inline as base64. Prefer create_upload_url instead: inline base64 is slow and costly above roughly 100KB. For a user's own files only. Needs a FileToUrl Developer API key.
