
FoundryNet — Industrial Machine Intelligence
io.github.FoundryNet由 GitHub 账号 FoundryNet 发布v1.1.0更新于 Nov 2, 2026
Cross-OEM industrial machine intelligence: identity, normalization, automation, attestation.
概览
面向跨厂商工业设备的托管 MCP 服务器:识别机床、归一化 OEM 遥测、运行自动化、预测故障并核验工作记录。
- 可以做什么
- 识别机床,并把原始 OEM 遥测归一化为统一字段结构,支持覆盖度查询与映射修正
- 查询机床运行历史,创建、启用、列出、停用、删除或恢复自然语言自动化,并查看 webhook 历史
- 预测故障、越限与剩余寿命,评估机群健康度、检测异常并查看预测准确率
- 计算 OEE、能耗、班次报告、机床诊断与健康指数,并检查护栏规则
- 查看接入自有内核的智能体,并生成防篡改、哈希校验的工作记录
- 运行从监听到触发的沙箱演示流程
- 适用场景
- 适合需要同时面对多品牌工厂设备(数控机床、机器人、协作机器人)的场景:希望用自然语言查询、统一遥测口径、配置自动化并做预测性维护,而不必为每个厂商单独接入工具。
- 运行要求
- 远程 Streamable HTTP 端点(同时保留旧版 SSE);无需本地安装。需要 Forge API 密钥,通过 Authorization Bearer 请求头传递,可在官网免费注册获取;免费层仅开放只读工具,高级预测与诊断工具按次计费。
安装
在 SourceWeft 中
- 打开 控制台中的 FoundryNet — Industrial Machine Intelligence,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
交给智能体安装
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/io.github.FoundryNet%2Fforge-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。其他 MCP 客户端
把它添加到你客户端的 mcpServers 配置中。
{
"mcpServers": {
"foundrynet-industrial-machine-intelligen": {
"type": "http",
"url": "https://foundrynet-mcp-production.up.railway.app/mcp"
}
}
}README
Forge by FoundryNet — Industrial Machine Intelligence
The cross-manufacturer industrial MCP server. Talk to any CNC, robot, or industrial machine in natural language — machine identity, telemetry normalization across 46 vendor packs in 20 verticals, plain-English automation, and tamper-evident work records.
Hosted MCP over Streamable HTTP. 32 tools wrap the Forge v1 API: provision a stable machine identity, normalize raw OEM telemetry into a canonical schema, query operational history, parse and activate plain-English automations, predict failures (TimesFM), score fleet health, and record every state-changing action as a verifiable, tamper-evident work record.
- Website: https://foundrynet.io/?utm_source=github&utm_medium=readme&utm_campaign=forge-mcp-readme
- Docs: https://foundrynet.io/docs?utm_source=github&utm_medium=readme&utm_campaign=forge-mcp-readme · Free key: https://foundrynet.io/signup?utm_source=github&utm_medium=readme&utm_campaign=forge-mcp-readme
- MCP endpoint (Streamable HTTP):
https://mcp.foundrynet.io/mcp - Legacy SSE endpoint (still served):
https://mcp.foundrynet.io/sse - Health:
https://mcp.foundrynet.io/health - Server card:
https://mcp.foundrynet.io/.well-known/mcp/server-card.json
What it does
It normalizes raw OEM telemetry from 18 manufacturer families into one canonical vocabulary with thousands of confirmed field mappings — so an agent writes against one set of field names whether the machine is a Fanuc CNC, a KUKA arm, or a Universal Robots cobot. On top of that it turns plain-English instructions into structured automations (review then activate), and records every state-changing action as a tamper-evident work record.
Architecture
Pure HTTP proxy. Every tool is a thin wrapper around https://forge.foundrynet.io/v1/*.
No state, no shared imports with forge-prod — separate Railway service, separate
dependencies (fastmcp + httpx).
Tenancy. The upstream call is made as the CALLER, not as this server. It used
to be made with the server's own FOUNDRYNET_API_KEY for every caller, with no
caller named: forge-prod scopes rows to the authenticated key's owner, so every
MCP tenant read and wrote inside one shared Forge account — and fleet_oee,
shift_report, list_agents and prediction_accuracy take no machine argument,
so they returned that whole account. The upstream hop now REFUSES to run when it
cannot name the caller: there is no fallback, because the only fallback is the
shared key. OAuth access tokens carry a key id but not a key, so they cannot be
presented upstream and are refused on tool calls with
tenant_context_unavailable.
POST /a2a/tasks and GET /a2a/agents go through the same gate function
(gating.enforce_call) as tools/call, by skill→tool mapping. They previously
authenticated the caller and then dispatched with no tier check, no cap and no
payment gate, which made the A2A route a free pass to the paid inference tools.
Tests and the release gate
The suite drives the real ASGI app over real Streamable HTTP through the real
gate; only Supabase and the upstream hop are substituted, and the upstream
substitute RECORDS requests, because what identity this server presents to
forge-prod is the thing most worth asserting. tests/test_rest_mcp_parity.py
measures free-tier parity against forge-prod's own _endpoint_to_billing_meter,
read out of its source at test time rather than copied.
CI runs the whole tree on every push and pull request
(.github/workflows/release-gate.yml, pinned to ubuntu-24.04): measured
223 passed, 6 skipped, 229 collected in 2m04s. The 6 skips are the checks
that read forge-prod's api.py off the local disk — 5 parity plus the
cost-ledger single-writer check — and they skip loudly, with their reason
printed, because forge-prod is a separate private repo and is not on the runner.
A visible skip beats a green tick over a check that was quietly dropped.
Deploying
Never railway up by hand. deploy.sh does seven things in order, and five of
them exist because of a specific way a deploy has gone wrong:
- refuses a dirty tree or a branch that is not
main—railway upuploads the WORKING TREE, so with uncommitted changes no commit describes what ships; - runs
scripts/release_gate.shand refuses if it is red. There is no override flag, deliberately; - takes a deploy lock (
~/.forge-mcp-deploy.lock, atomicmkdir) so two concurrent deploys cannot race on the upload and on the verification; - refuses if
railway upwould archive the wrong directory. It archives the CLOSEST LINKED project directory from~/.railway/config.json, walking UP — not$PWD. This directory once inherited$HOME's link, which names a DIFFERENT SERVICE; - runs
stamp_build.py, which writesbuild_info.json(commit, dirty state,content_hashover the uploaded file set, build time); railway up --service 162115b7-…— the id is explicit, because a barerailway upresolves the service from that same ancestor link;- polls
https://mcp.foundrynet.io/healthuntilbuild.commit_shortANDbuild.content_hashboth equal the stamp it just wrote, then asserts the status. Railway reporting SUCCESS only means the upload and build succeeded — a crash-looping new container leaves the OLD one serving and the deploy looks fine.content_hashis checked as well as the commit becauserailway upuploads a tree: the same commit with a different tree is a different deployment.
/health carries a build block using the same key names as forge-prod's, so
one verifier reads both services. When build_info.json is absent it says so in
words — build_info.json absent — deploy did not run stamp_build.py, with
commit, content_hash and built_at present and null — because a null that
looks like a missing field is indistinguishable from a stamped build.
Tools (32)
Identity & data: identify_machine, normalize_telemetry, query_machine_history,
get_coverage, correct_mapping. Automation: create_automation, activate_automation,
list_automations, disable_automation, delete_automation, restore_automation,
query_webhook_history. Prediction (TimesFM): predict, predict_breach, remaining_life,
predict_batch, fleet_health, detect_anomalies, machine_intelligence,
prediction_accuracy. Operations: calculate_oee, fleet_oee, energy_consumption,
shift_report, diagnose_machine, health_index. Guardrails: check_guardrail,
list_guardrails. Agents on your kernel: get_agent_card,
list_agents. Work records: verify_record. Demo: fire_sandbox (the full watch → fire →
settle loop, no card).
get_agent_card and list_agents are scoped to the agents connected to your kernel instance
(their capabilities, trust scores, and machine access) and are included in your subscription —
there is no per-call charge. They are operational tools for coordinating agents on your own
equipment, not cross-platform discovery. For cross-platform agent trust across any framework,
see Assay (assay.foundrynet.io). verify_record creates a tamper-evident, hash-verified record
of completed work.
Free tier exposes the read-only tools; metered pay-per-use unlocks the premium prediction and diagnostics tools (see https://forge.foundrynet.io/pricing?utm_source=github&utm_medium=readme&utm_campaign=forge-mcp-readme).
Connect (Claude Desktop, Cursor, any MCP client)
Or via claude_desktop_config.json with the mcp-remote bridge:
Legacy SSE (--transport sse against https://mcp.foundrynet.io/sse) remains supported for
existing configs, but new integrations should use the Streamable HTTP /mcp endpoint above.
Get a free fnet_ key at https://foundrynet.io/signup?utm_source=github&utm_medium=readme&utm_campaign=forge-mcp-readme (50 normalize calls, no card).
Required environment (server-side)
Files
mcp_server.py— the server (32 tools +/health+/.well-known/mcproutes)gating.py— per-client tier gating (Free vs Pro tool/quota enforcement)server.json— MCP registry metadata (name, description, keywords, remote endpoint)smithery.yaml— Smithery listing metadatarequirements.txt—fastmcp>=3.4.5,<4,httpx>=0.27,PyJWT>=2.14.0,supabase,stripetests/— the behavioural suite (auth, tenancy, parity, idempotency, cache scope)scripts/release_gate.sh— must be green on the exact commit before a deploydeploy.sh— the only path to production; gated, locked, stamped and verifiedstamp_build.py— writesbuild_info.json; what/health'sbuildblock reportsProcfile— Railway start command (stamps, thenpython mcp_server.py).github/workflows/release-gate.yml— CI; the whole suite on push and PR
License
Proprietary (commercial). © Foundry Labs LLC. Contact: [email protected]
来源:README.md,提交 1a07430
工具
0版本历史
1- v1.1.0最新Sep 16, 2026
评分
已满足适用检查项的 75%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通必需25 分
- 已声明认证方式必需10 分
- 已列出工具必需15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
请在仓库或注册中心条目中声明许可证。