Skip to main content
Glama
naubergois

FileAgent

by naubergois

FileAgent

FTP for agents: a shared virtual filesystem, each file addressed and verified by SHA-256, with metadata extracted on upload.

Agents on the same FILEAGENT_DATA_DIR (stdio) or on the same HTTP server see the same collection. Nothing enters or leaves without a registered hash (ftp_register). That access_hash is the channel; the file's SHA-256 is the proof of integrity.

Model

Concept

What it is

Access hash

Credential registered with ftp_register. Without it, put/get fail. Each hash is an isolated channel.

Path

FTP path (/inbox/nota.md) inside the access_hash.

Blob

Immutable bytes. Address = sha256(bytes). Every read recalculates the hash.

Metadata

Extracted from content: mime, kind, title, language, headings, CSV columns, JSON keys, image dimensions, PDF hints.

Document

Mutable pointer behind the path. Serves checkout/commit between agents.

CAS

expected_hash on get/put. Tampered disk → code=tampered.

agente A                         FileAgent                       agente B
   |-- ftp_register() -----------> |                               |
   |<-- access_hash ---------------|                               |
   |---------------- compartilha access_hash --------------------->|
   |-- ftp_put(/inbox/a.md, hash) >|  sha256 + metadata            |
   |                               |<-- ftp_get(/inbox/a.md, hash)-|

Two agents with the same secret in ftp_register get the same access_hash.

Related MCP server: MEFS MCP Server

FTP Tools

Tool

Usage

ftp_register

Registers the hash. Without it, put/get are refused.

ftp_revoke / ftp_hashes

Revokes or lists hashes from this agent.

ftp_put

Sends. Requires access_hash. Writes SHA-256 + metadata.

ftp_get

Downloads. Requires the same access_hash. Recalculates SHA-256.

ftp_ls

Lists this hash's channel (content + metadata).

ftp_stat / ftp_meta

Metadata only (path or hash).

ftp_verify

Integrity audit.

ftp_find

Search by path, hash, title, kind, columns…

ftp_mkdir / ftp_rm / ftp_mv / ftp_cp

FTP-style navigation.

doc_* continues for collaborative editing (lock + doc_commit) of the document linked to the path.

Resources: fileagent://fs, fileagent://docs, fileagent://blob/{hash}.

Extracted Metadata

On ftp_put / ftp_stat / ftp_ls:

  • always: hash, size, mime, kind, filename, extension

  • text / markdown: title, headings, lines, words, language (pt/en)

  • JSON: validity, type, keys

  • CSV: columns and number of rows

  • PNG / JPEG / GIF: width and height

  • PDF: version, title/author if present in the header

Admin and Password

Only the admin registers access_hash. The plaintext password stays only in the project's .venv (outside git):

  • hash: .venv/fileagent_admin.hash (PBKDF2-SHA256)

  • password: .venv/fileagent_admin.password

uv run fileagent --init-admin          # gera se ainda não existir
uv run fileagent --rotate-admin        # nova senha

Browser panel: open / and enter that password to see all files from all channels. Without login, the list does not appear.

# cadastrar um canal para clientes
curl -sS -X POST http://127.0.0.1:8765/v1/admin/register \
  -H "Content-Type: application/json" \
  -d '{"admin_password":"<senha>","label":"equipe-a"}'

Clients do not register hashes. They use the access_hash returned in POST /v1/files or ftp_put.

Going Live

uv run fileagent --http --host 0.0.0.0 --port 8765
  • Admin panel (login): http://<host>:8765/

  • MCP: http://<host>:8765/mcp

  • REST: POST/GET /v1/files with header X-Access-Hash

  • Health: GET /healthz

Skills

  • fileagent-send — agents that send

  • fileagent-receive — agents that list/download

Installation

cd /Users/naubergois/FileAgent
uv sync --extra dev

Cursor (same store between agents)

{
  "mcpServers": {
    "fileagent": {
      "command": "uv",
      "args": ["--directory", "/Users/naubergois/FileAgent", "run", "fileagent"],
      "env": {
        "FILEAGENT_DATA_DIR": "/Users/naubergois/.fileagent",
        "FILEAGENT_AGENT_ID": "cursor",
        "FILEAGENT_OPEN_EDIT": "1"
      }
    }
  }
}

Each agent: same FILEAGENT_DATA_DIR, distinct FILEAGENT_AGENT_ID.

HTTP

uv run fileagent --http --port 8765

Variables

Variable

Default

Function

FILEAGENT_DATA_DIR

~/.fileagent

SQLite + blobs. Same path = same FTP.

FILEAGENT_AGENT_ID

user@host

Who sent / edited.

FILEAGENT_OPEN_EDIT

1

Store agents edit shared paths.

FILEAGENT_HOST / PORT

127.0.0.1 / 8765

--http mode.

private paths are only visible to the owner (and grants). agent_id is coordination, not strong authentication. Content security is the hash: if the bytes change, the read fails.

Current production (AWS): https://fileagent.54-204-243-102.sslip.io/ — panel with admin password.

Tests

uv run pytest -q
A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that provides AI agents with a persistent, PostgreSQL-backed virtual filesystem, supporting session-isolated file operations, cross-session shared stores, and glob/grep search.
    11
    45
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides a browsable, mutable SFTP filesystem for AI agents, supporting file operations like listing, uploading, downloading, moving, and deleting.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that gives AI agents file system access: read, write, search, hash, directory trees — 12 tools, zero dependencies, pure Python stdlib.
    MIT

View all related MCP servers

Related MCP Connectors

  • Encrypted A2A object storage for autonomous agent state and artifacts

  • File uploads for AI agents. Upload, list, and manage files. No signup required.

  • Shared long-term memory vault for AI agents with 20 MCP tools.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/naubergois/FileAgent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server