Skip to main content
Glama
gitkvn

stickafile-mcp

by gitkvn

stickafile-mcp

An MCP server that lets a coding agent upload a file from disk to a Stickafile portal and hand back a shareable link. The bytes go from disk to storage and never enter the model's context.

Two tools:

  • push(path, portal?){ url, name, size }

  • list_portals() → the portals the token can push to

Install

  1. Sign in at stickafile.com, open the gear menu, choose api tokens, and create one. Your first token also creates an inbox-mode portal named "agent pushes" if you have none.

  2. Register the server with Claude Code, pasting the token:

    claude mcp add stickafile --scope user -e STICKAFILE_TOKEN=sf_... -- npx -y stickafile-mcp
  3. In a project, ask for a link to a file:

    push dist/report.pdf and give me the link

Any MCP client works; the equivalent .mcp.json entry is:

{
  "mcpServers": {
    "stickafile": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "stickafile-mcp"],
      "env": { "STICKAFILE_TOKEN": "sf_..." }
    }
  }
}

Related MCP server: @putput/mcp

Configuration

Variable

Required

Meaning

STICKAFILE_TOKEN

yes

An sf_ API token. Scopes: list portals, push files.

STICKAFILE_ALLOW

no

Directories push may read from, separated by : (; on Windows). Default: the directory the server was started in, which Claude Code sets to the project.

STICKAFILE_PORTAL

no

Default portal, by name or 8-character token, when push is called without one.

STICKAFILE_URL

no

Base URL. Default https://stickafile.com. Point at a dev deploy to test.

Set them with more -e flags on claude mcp add, or in the env block of .mcp.json.

Choosing a portal

When push is called without portal: STICKAFILE_PORTAL if set, otherwise the single active portal if there is exactly one, otherwise an error listing every active portal for the user to pick from. The server never picks silently among several.

The portal argument itself takes an 8-character portal token (e.g. a1b2c3d4), never a name. A name is guessable and an agent can invent a plausible one; a token has to come from list_portals.

Safety

push reads files, so it is the tool a prompt injection would aim at. The controls below run in the server and do not depend on the model behaving.

  • STICKAFILE_ALLOW is the real boundary. path must be absolute, symlinks are resolved first, and the resolved path must sit inside one of the allowed roots. The agent cannot widen the roots.

  • Deny list inside the roots. Dotfiles and dot-directories (.env, .git, .ssh, .aws, ...) and credential-shaped names (*.pem, *.key, id_rsa, credentials, ...) are refused. There is no override. Regular files only, one per call. The API token never appears in tool output.

  • Portal choice. A push to the wrong shared portal exposes the file to everyone holding that portal's link. Requiring a token rather than a name raises the bar, but an agent that has called list_portals can still pass any token it saw. STICKAFILE_PORTAL is the only hard control: when it is set, that portal is used unless the agent passes another token explicitly, and there is no setting that forbids the argument.

Claude Code's own permission prompt is the human confirmation. The path shown there is the path that gets read.

No resume

A failed push restarts from the beginning; the abandoned server-side session is cleaned up automatically. Because a retry re-sends the whole file, push tells the agent not to retry on its own and to ask the user first.

Development

npm run test:unit                # path and deny-list tests; no network
STICKR_REPO=../stickr npm test   # plus the full e2e against a local stickr checkout

The e2e boots the Stickafile backend from a checkout of the private stickr repo, so outside contributors cannot run it; npm run test:unit is the suite that runs anywhere.

src/upload.js is a port of public/upload-core.js in the stickr repo. The retry, chunking, and presign-continuation logic must stay in step between the two; see the header comment in each.

Available Tools

2 tools
list_portalsList Stickafile portalsA
Read-only

List the Stickafile portals this account can push to, with each portal's name, token, mode (shared or inbox), status, and file count. Call this when push reports that a portal must be chosen, or when the user asks what portals exist. Not needed before an ordinary push.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
portalsYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavior context by naming what each portal entry contains (name, token, mode, status, file count) and clarifying the shared-vs-inbox mode distinction, though it says nothing about pagination, result limits, or the sensitivity of the exposed token.

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

Conciseness5/5

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

Three compact sentences: the first states what is listed, the second states when to call it, the third states when not to. Nothing is padding, and the routing condition is front-loaded after the purpose.

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

Completeness5/5

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

For a zero-parameter read tool with a full output schema and covering annotations, this is complete. Fields are summarized for orientation, trigger conditions are explicit, and no knowledge an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description correctly does not invent parameter guidance.

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?

States a specific verb and resource ('List the Stickafile portals') plus scope ('this account can push to') and enumerates the returned fields. It is immediately distinguishable from the sibling 'push' tool, which performs the upload rather than enumerating destinations.

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?

Gives explicit triggering conditions ('when push reports that a portal must be chosen, or when the user asks what portals exist') and an explicit exclusion ('Not needed before an ordinary push'). The agent knows both when to call it and when to skip it relative to the push sibling.

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

pushPush a file to StickafileA

Upload a file from disk to a Stickafile portal and return a shareable download link. Use this when the user wants to send, share, or hand off a file (a build, an export, a report, an archive, a video, a dataset) to a person or another machine, or asks for "a link" to a file. The bytes are read from disk and uploaded directly; they never enter the conversation. path must be an absolute path to a regular file inside the workspace. Dotfiles and credential-like files (.env, keys, certificates) are refused. portal is an 8-character portal token, obtained from list_portals; never invent one. It is optional when the account has exactly one active portal. If it is omitted and the account has several portals, the tool returns the list of portals (name, token, and whether each is shared) for the user to choose from — relay that and ask; do not pick one yourself. Tell the user which file you are uploading before calling this. Uploads take roughly a minute per gigabyte; call once per file and wait for the result. Do NOT retry a failed push automatically: there is no resume, so a retry re-sends the entire file from the start. Stop and ask the user whether to retry. Returns { url, name, size }.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to the file to upload
portalNoThe 8-character portal token to push to, from list_portals. Not a portal name. Optional when the account has exactly one active portal; if omitted with several, the tool returns the list to choose from.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
nameYes
sizeYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations establish this is a non-read-only, open-world, non-idempotent, non-destructive write. The description goes well beyond them, disclosing that bytes are read from disk and never enter the conversation, that dotfiles/credential-like files are refused, that ~1 minute/GB throughput applies, that there is no resume on retry, and that a missing portal with multiple portals triggers a portal-list response. This is unusually rich behavioral context.

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?

Front-loaded with the core action and return value, then layers edge cases in a logical order. It is long, but nearly every sentence carries actionable constraint (refusals, no-retry, throughput, portal fallback). Slightly verbose with repeated portal-optional phrasing, hence not a full 5.

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

Completeness5/5

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

For a 2-parameter upload tool with an output schema and annotations, the description covers the full operational surface: input constraints, credential refusals, timing, retry policy, and the ambiguous multi-portal case. Nothing an agent needs to call it correctly is missing, and the return shape is stated since an output schema exists.

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

Parameters4/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 real meaning beyond the schema: path must be absolute and inside the workspace, and portal behavior when omitted (single-portal default vs. multi-portal fallback returning the list), plus 'never invent one.' These operational semantics exceed the field-level schema text.

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?

States a specific verb and resource: upload a file from disk to a Stickafile portal and return a shareable download link. Clearly separates this from list_portals, which is named only as the source of a portal token. An agent knows exactly what the tool does without opening the schema.

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?

Explicit when-to-use ('when the user wants to send, share, or hand off a file ... or asks for "a link"'), with concrete examples (build, export, report, archive). It also gives operational exclusions: call once per file, wait, do NOT retry automatically because there is no resume, and stop and ask instead. Alternatives and conditions are spelled out.

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.

  1. 2 tool updatesv0.1.0
    • First observedlist_portals
    • First observedpush

TDQS

A4.5/5.0

Scored across 2 tools

Disambiguation5/5

push uploads a file and returns a link, while list_portals enumerates available portals; these are clearly distinct resource+action pairs with no overlap. The descriptions even clarify the dependency relationship between them without creating ambiguity.

Naming Consistency4/5

Both names use lowercase snake_case, but 'push' is a bare verb while 'list_portals' follows the verb_noun convention. The deviation is minor and both remain readable and predictable in style.

Tool Count3/5

Two tools is thin even for a focused file-sharing server; the primary action (push) plus one helper leaves no room for adjacent operations. It is defensible for a narrowly scoped uploader, but sits at the borderline of feeling under-provisioned.

Completeness3/5

The core upload-to-link workflow and portal discovery are covered, but there is no way to list files already in a portal, check upload status, delete/revoke a previously shared file, or manage portals beyond listing them. These are notable gaps for a file-sharing lifecycle.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables users to upload files and generate tracked, shareable links directly from AI agents like Claude Desktop or Cursor. It supports publishing various file formats including text, PDFs, and images, while providing tools for artifact management and analytics.
    8
    44
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    File uploads for AI agents. Upload, list, and manage files from AI coding assistants like Claude, Cursor, Windsurf, and VS Code Copilot with no signup required.
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely transfer files between machines via encrypted, expiring share links, with tools for upload, download, status checks, and link management.
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    Enables AI agents and users to upload and download files via MCP, generating shareable links and identifier codes. Files are automatically deleted after 24 hours.
    9
    -