
Maplith Bridge
com.maplith由 maplith.com 发布v1.2.0-rc.1更新于 Oct 24, 2026
Share a folder of data files read-only over MCP, and fill it from PostgreSQL under a read-only role.
发布方自己的服务:Maplith
概览
Maplith Bridge 通过 MCP 以只读方式共享一个数据文件夹,并用只读角色从 PostgreSQL 填充该文件夹。
- 可以做什么
- 列出并读取共享文件夹中的文件:list_files 与 read_file,以及 resources/list 和 resources/read,每个顶层文件夹视为一个系统。
- 从 PostgreSQL 填充文件夹:提取器为每张表写一个 CSV 文件,并写一份包含表、列、键和行数估算的 schema 文件。
- 提取前检查数据库角色:检查模式只验证角色是否只读,不写入任何内容。
- 管理访问:一条命令轮换令牌,并可用允许选项限制调用方。
- 以 HTTP 在本机提供文件夹,或以 stdio 提供给单个本地代理。
- 适用场景
- 当代理需要只读访问一个导出的数据文件夹,或访问以 CSV 导出的 PostgreSQL 表,而又不想交出数据库凭据时使用。适合数据必须留在自有网络、代理只应读取的场景。
- 运行要求
- 需要 Node.js 24 或更高版本,通过 npx 运行。需要先用 rotate-token 命令生成令牌,并以 Authorization bearer 头传入;stdio 模式会自行生成令牌。需要一个共享文件夹,由目录选项或 EXPORT_DIR 变量指定。提取时还需 PostgreSQL 连接设置,如 PGHOST、PGDATABASE、PGUSER,以及仅能读取的角色。
安装
在 SourceWeft 中
- 打开 控制台中的 Maplith Bridge,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Maplith for your agents
[CI] [OpenSSF Scorecard] [Built by Maplith]
Maplith maps how a company's systems fit together, so any AI agent can find the data it needs, by which key, and how far to trust each step. This repository holds the open-source parts that run on your side, next to your agent and your data. One product, three parts:
All of it is one npm package, maplith,
with one command: maplith setup puts Maplith in your agent, and
maplith bridge is Maplith Bridge.
Set Maplith up in your agent
No account? You create one in the browser window that opens when you sign in, and come straight back. Your agent then builds your first map with you.
One command, with Node.js 24 or newer. It runs your agent's own commands and writes no key anywhere:
Or by hand. Claude Code:
then run /mcp, choose maplith and Authenticate. OpenAI Codex:
Codex does not pass your environment to a plugin's servers, so to share a
folder with Codex through the Bridge, name it once:
npx --yes [email protected] setup codex --dir <folder>.
Everything here is Apache-2.0.
Maplith Bridge
Connect your database to your AI agent, read-only, without giving anyone your password.
The Bridge runs in your own network. It shares one folder of data files over MCP (the Model Context Protocol), behind a token you create, and it can fill that folder from PostgreSQL under a database role that can only read.
- Read-only, end to end. The server has no method that writes and accepts no file. The extractor refuses to run under a role that can do more than read.
- Your password stays with you. The database password never leaves the machine the extractor runs on, and the server that faces the network never holds it.
- Small enough to read. Six files of TypeScript: four for the Bridge, and
the
maplithcommand and itssetup. The server runs on Node.js alone; the extractor has one dependency, the PostgreSQL client, pinned.
Any MCP client can use it: Claude Code, Codex, Claude Desktop, your own agent. It works best with Maplith, which reads the folder to map how your systems fit together.
Quick start
You need Node.js 24 or newer.
The first command writes a random token to maplith-bridge.token, readable
by you only. The second serves the files in ./exports at
http://127.0.0.1:8787/mcp, on this machine only. Point any MCP client at that
address with the header Authorization: Bearer <the token>. With Claude Code:
To fill the folder from PostgreSQL, under a read-only role:
--check verifies the role and writes nothing. Run it again without --check
to write one CSV file per table.
Beside the CSV files of each folder, the extractor writes maplith-schema.json,
which the server shares like any other file: for each table, its file, its
columns with their PostgreSQL attribute numbers and types, its keys and its
estimated row count. It holds names and numbers, never a value, and names the
database only by a digest of its identity (below). A reader can tell
from it that a renamed column is the same column (its attribute number stays)
and that a column dropped and added again is a new one (it gets a new number).
A restore keeps the relation ids and attribute numbers it had, and the next
ADD COLUMN can reuse a number that a later state had given another column.
So the digest is made of the server's system identifier and timeline, when
its statistics were last reset, the database's id and name, and an epoch the
extractor keeps in the folder, and it changes when the extractor sees that the
database's history did not go on from its last run: another server or
database, a new timeline (a point-in-time recovery or a promotion), a reset of
the server's statistics (every start that has to recover resets them: after a
crash, or from a restored snapshot or base backup), a table or column whose
catalog entry was written again before that run (an earlier copy restored,
then changed), or no record of that run in the folder (a first run, a new
install, another folder: its record starts with an epoch of its own, drawn at
random, so it never states the digest another folder stated). One restore goes
unseen: a copy of the data directory taken while the server was stopped and
started again as it was, changed only once its transaction counter had passed
where the original's stood at the extractor's last run (or restored together
with the extractor's folder). The same numbers can then name other columns
under the same digest.
Where the role may not read the system identifier, the timeline or when the
statistics were last reset, the file names no database ("database": null),
and its numbers describe that run only: a restore into a fresh server can give
the same relation ids again, and it renumbers the attribute numbers.
Run any command with --help for every option.
Set it up for real
- RUNBOOK.md: a server install, step by step, for the person who runs it: two system users, the read-only role, TLS, a systemd service.
- INSTALL-WITH-YOUR-AGENT.md: one prompt that has
your own AI agent do the same install, stopping for you at every decision,
password and
sudo.
How it keeps your data safe
THREAT-MODEL.md names the tests behind every row.
Verify a release
Every release on GitHub carries the tarball, its SHA-256 checksum and a build
attestation. The same tarball is published to npm with provenance, so npm's
digest of it must match the file from GitHub: the two sha512- lines below
are equal.
After installing from npm, npm audit signatures checks the registry
signature and the provenance.
Use it from any MCP client
The Bridge speaks MCP 2025-06-18 (and 2025-03-26, 2024-11-05) over Streamable
HTTP: JSON-RPC 2.0 requests by POST to /mcp. It offers:
- resources:
resources/list(100 per page, with a cursor) andresources/read; - two read-only tools on the same code path:
list_filesandread_file.
Each top-level folder is one system: exports://shop/orders.csv is the file
orders.csv of the system shop. A file is listed only when it fits in one
reply of at most 8 MB. GET /healthz answers 204 for a health check.
File contents come from your systems. Tell your agent to treat them as data,
never as instructions; the Bridge says the same in its instructions.
Use it from an agent on this machine
An agent that starts its MCP servers as local commands, such as Claude Code, can start the Bridge itself:
stdio serves the folder to that one agent over its stdin and stdout: the
same server as serve, on 127.0.0.1 only, behind a token that lives only
in its process. There is no token file and nothing to type. The folder comes
from --dir or EXPORT_DIR; without one it serves an empty folder and says
how to name one. The Maplith plugin starts it this way: in Claude Code with
the folder from MAPLITH_BRIDGE_DIR, in Codex with the folder setup codex --dir names. The older command maplith-bridge still works, as
maplith bridge. To share a folder with Maplith or with
an agent on another machine, use serve.
For MCP directories
A directory of MCP servers, such as Glama,
builds this repository in a sandbox and inspects the server over stdio, with
no folder and no token to give it. glama-stdio.ts is the entry for that,
and only for that:
- it creates an empty folder of its own, so there is nothing to share;
- it draws a random token that lives only in its memory: never in a file, an argument, the environment or a log;
- it starts the Bridge's own server on
127.0.0.1, on a free port, serving that folder behind that token; - it relays MCP between stdin and stdout and that server, one JSON-RPC message per line, and logs to stderr only;
- when stdin ends, or on SIGTERM, it stops the server and removes the folder.
A directory sees the Bridge as it is: its initialize reply and
instructions, the tools list_files and read_file, and an empty list of
files. The entry takes no argument and cannot share a folder: serve does
that. It is in this repository, not in the npm package.
With Node.js 24 or newer, from a checkout:
A directory that speaks HTTP to its sandbox puts
mcp-proxy in front of it:
mcp-proxy -- node glama-stdio.ts. On Glama, the server's settings are:
Limits
- PostgreSQL is the one database the extractor reads. Any other system can fill the folder with its own export files.
- The server reads a TLS certificate when it starts: restart it after a renewal.
- Behind two proxies in a row, name both with
--behind-proxy.
Versioning
The Bridge follows semantic versioning. Every change is in CHANGELOG.md.
Contributing, security, licence
- CONTRIBUTING.md: how to propose a change (with a DCO sign-off).
- SECURITY.md: report a vulnerability privately, to [email protected] or through GitHub.
- Apache License 2.0 (LICENSE). "Maplith" and the Maplith logo are trademarks of Maplith (TRADEMARK.md).
来源:README.md,提交 d9373c1
工具
0版本历史
2- v1.2.0-rc.1最新Oct 22, 2026
- v1.0.0-rc.1Oct 10, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分