Koskamo

File Relay MCP

A remote MCP connector enabling AI agents to upload generated files and receive expiring download links. It supports creating upload links, retrieving file info, reading files, and deleting files early, with links expiring after 24 hours by default.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

File Relay MCP logo, by easyllmsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by easyllms
MCP endpoint (Streamable HTTP)
https://code.easyllms.com/relay/mcp
Vendor documentation

What you can do with it

  • Upload a generated file to get an expiring download link
  • Retrieve information about a specific file
  • Read the content of a relayed file
  • Delete a file early using its delete token

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
file-relay 1.1.0
MCP protocol
2025-06-18
Tools
5 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

File Relay hands files produced inside an agent session to a person (or another agent) through an expiring download link. Links expire after 24 hours by default (at most 7 days); files can be up to 100 MB. To relay a file of any size: 1. Save the file to local disk first (write it with your file or code tools). 2. Call create_upload_link with the local path. 3. Run the returned curl command in your shell. Never paste file contents into tool arguments. If curl cannot reach code.easyllms.com (connection refused, DNS failure, 403 from a proxy, "host not allowed"), your sandbox blocks outbound network. Tell the user to allow the domain code.easyllms.com, e.g. on claude.ai: Settings > Capabilities > Code execution > network egress / allowed domains, then retry. In ChatGPT, files attached to the conversation can be relayed with relay_attached_file instead. Always show the user the download_url and its expiry. Keep delete_token private; it is only needed for delete_file.

Tools

5 advertised

create_upload_link — Create upload link
Advertised by the server during the last successful anonymous check.
Open-world

Relay a file of any size up to 100 MB. Save the file to local disk first, call this with its path, then run the returned curl command in your shell to upload it. The download link works as soon as the upload finishes. Requires outbound network access to code.easyllms.com; if curl is blocked, ask the user to allow that domain in their sandbox network settings (on claude.ai: Settings > Capabilities > Code execution).

create_upload_link input schema
{
  "type": "object",
  "required": [
    "path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "description": "Local path of the file you saved, e.g. /tmp/report.pdf. Used to build the curl command."
    },
    "filename": {
      "type": "string",
      "description": "Optional name shown to the downloader; defaults to the file name in path."
    },
    "ttl_hours": {
      "type": "number",
      "maximum": 168,
      "minimum": 0.1,
      "description": "Hours until the download link expires. Default 24, maximum 168 (7 days)."
    },
    "content_type": {
      "type": "string",
      "description": "Optional MIME type; guessed from the extension otherwise."
    }
  },
  "additionalProperties": false
}
create_upload_link annotations
{
  "title": "Create upload link",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
relay_attached_file — Relay attached file
Advertised by the server during the last successful anonymous check.
Open-world

ChatGPT only: relay a file from the conversation (the host passes it as a file reference) and get a temporary download link.

relay_attached_file input schema
{
  "type": "object",
  "required": [
    "file"
  ],
  "properties": {
    "file": {
      "type": "object",
      "required": [
        "download_url"
      ],
      "properties": {
        "file_id": {
          "type": "string"
        },
        "file_name": {
          "type": "string"
        },
        "mime_type": {
          "type": "string"
        },
        "download_url": {
          "type": "string"
        }
      },
      "description": "File reference provided by the host."
    },
    "filename": {
      "type": "string",
      "description": "Optional file name override."
    },
    "ttl_hours": {
      "type": "number",
      "maximum": 168,
      "minimum": 0.1,
      "description": "Hours until the download link expires. Default 24, maximum 168 (7 days)."
    }
  },
  "additionalProperties": false
}
relay_attached_file annotations
{
  "title": "Relay attached file",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_file_info — Get file info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Look up a relayed file by id or download URL: name, size, type, expiry and download link.

get_file_info input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "File id or download URL returned by an upload tool."
    }
  },
  "additionalProperties": false
}
get_file_info annotations
{
  "title": "Get file info",
  "readOnlyHint": true,
  "openWorldHint": false
}
read_file — Read file
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a relayed file's content (up to 1 MB) so an agent can pick up a file someone else relayed. Text comes back as text, images as images, other files as base64.

read_file input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "File id or download URL from this relay."
    }
  },
  "additionalProperties": false
}
read_file annotations
{
  "title": "Read file",
  "readOnlyHint": true,
  "openWorldHint": false
}
delete_file — Delete file
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete a relayed file before it expires. Requires the delete_token returned at upload.

delete_file input schema
{
  "type": "object",
  "required": [
    "id",
    "delete_token"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "File id or download URL."
    },
    "delete_token": {
      "type": "string",
      "description": "delete_token returned at upload."
    }
  },
  "additionalProperties": false
}
delete_file annotations
{
  "title": "Delete file",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
449 ms
95th percentile latency
449 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 449 ms · metadata changed · 5 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http file-relay-mcp https://code.easyllms.com/relay/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add file-relay-mcp --url https://code.easyllms.com/relay/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable file-relay-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "file-relay-mcp": {
      "url": "https://code.easyllms.com/relay/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "file-relay-mcp": {
      "type": "streamableHttp",
      "url": "https://code.easyllms.com/relay/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start file-relay-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "file-relay-mcp": {
      "type": "http",
      "url": "https://code.easyllms.com/relay/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http file-relay-mcp https://code.easyllms.com/relay/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "file-relay-mcp": {
      "url": "https://code.easyllms.com/relay/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "file-relay-mcp": {
      "serverUrl": "https://code.easyllms.com/relay/mcp"
    }
  }
}

Let your agent find its tools

Find servers like File Relay MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.