材料/材料
简介
核心亮点
- 一站式连接 600+ 流行应用,无需重复开发
- 内置 OAuth 认证,简化第三方授权流程
- 提供企业级监控,确保 API 调用稳定可靠
- 极低上手难度,快速扩展 AI Agent 能力边界
完整文档
<img src="./assets/repo-header.webp" alt="Metorial" width="100%" />
<br />
<h1 align="center">Metorial (YC F25)</h1>
<p align="center">
面向 AI agents 的开源身份与访问层。<br />
通过一致的 auth、permissions 和 observability 将 agents 连接到真实系统。
</p>
> [!TIP]
> _跳过安装直接使用托管版:_ 使用 Metorial 最快、最简单且最可靠的方式是注册 我们的托管平台。
>
> ➡️ 立即开始(免费)
Introduction
Agents 正在被连接到生产系统,但缺乏统一的身份与访问层:访问控制有限、缺乏审计且没有标准的访问限制。Metorial 解决了这些问题。
Metorial 是一个用于 agent 访问外部系统的控制平面。它位于 agents 和 integrations 之间,以一致的方式处理 auth、permissions 和 observability。团队无需临时构建 integration,而是通过一个共享层来标准化 agents 与系统的交互方式。
Core Capabilities- 1200+ integrations,涵盖 SaaS 工具、企业系统、数据源和自定义 MCP servers。
- Auth 和 token 生命周期管理,支持 OAuth、API keys、service accounts 及其他凭据流。
- 内置 RBAC、SAML SSO 和 IAM,确保 agent 访问遵循您现有的安全模型。
- Scoped permissions,可针对每个 agent、workflow、团队或环境进行配置。
- Audit logs 和可追溯性,记录 agent 的操作,包括哪个 agent 使用了谁的凭据执行了操作。
- 共享访问模式,在团队和项目间通用,无需编写一次性的集成代码。
Metorial for Developers
Metorial 为开发者提供了一个将 agent 连接到真实系统的统一接口。
- 在 Claude Code、Codex 和 Cursor 等工具中使用 integrations,且不破坏安全策略。
- 将 integrations 作为 tools 暴露给任何 agent framework。
- 将 OAuth、API keys 和其他 auth flows 统一为一个 magic URL。
- 在项目、环境和人员之间复用 connections。
- 避免为每个应用重复实现集成和 auth 逻辑。
您只需对接一个 API 或使用一个 connection URL,其余部分由 Metorial 处理。
Metorial for Security
Metorial 为 agent 如何访问系统提供了结构化管理和可见性。- 具有 RBAC、SAML SSO、IAM 和 scoped credentials 的集中式访问控制。
- 每个 agent 具有清晰的权限边界。
- 所有操作均有审计日志,包括哪个 agent 使用谁的凭据执行了操作。
- 可控的集成共享。
- 一致且安全的凭据处理。
这使得 agent 活动可强制执行且可审计,无需依赖手动流程。让你的 Head of AI 满意,让你的 CISO 安稳入睡。
Ecosystem
- Metorial:涵盖 SaaS 工具和企业系统的集成目录。
- Metorial Platform:核心引擎,开源且支持私有化部署。
- Metorial CLI:用于与集成交互的 agent-first CLI。
- Lowerdeck:贯穿整个技术栈的共享库。
- Starbase:MCP 调试和测试工具。
SDKs
SDKs 开放了 Metorial API 并与 agent 框架集成。
它们以一致的方式处理 auth、访问控制和 tool 暴露。- <img src="https://raw.githubusercontent.com/metorial/metorial-platform/refs/heads/dev/assets/typescript.png" width="12px" height="12px" /> JavaScript / TypeScript
- <img src="https://raw.githubusercontent.com/metorial/metorial-platform/refs/heads/dev/assets/python.svg" width="12px" height="12px" /> Python
如果您想构建自定义集成,请参阅我们的 API documentation 以了解如何直接使用 Metorial API 的详细信息。
Self-Hosting
Metorial Platform 是驱动 Metorial 引擎的核心代码。它是开源的且支持 self-hosted。您可以使用它来运行自己的 Metorial 实例,并由本仓库中的 MCP servers 提供支持。
Quick Start
最简单的入门方式是使用 Metorial Search,这是一个内置的 Web 搜索提供商,无需进行 auth 配置。
JavaScript / TypeScripttypescriptimport { Metorial } from 'metorial';
import { metorialAiSdk } from '@metorial/ai-sdk';
import { anthropic } from '@ai-sdk/anthropic';
import { stepCountIs, streamText } from 'ai';
let metorial = new Metorial({ apiKey: process.env.METORIAL_API_KEY! });
let deployment = await metorial.providerDeployments.create({
name: 'Metorial Search',
providerId: 'metorial-search'
});
let session = await metorial.connect({
adapter: metorialAiSdk(),
providers: [{ providerDeploymentId: deployment.id }]
});
let result = streamText({
model: anthropic('claude-sonnet-4-20250514'),
prompt:
'Search the web for the latest news about AI agents and summarize the top 3 stories.',
stopWhen: stepCountIs(10),
tools: session.tools()
});
for await (let part of result.textStream) {
process.stdout.write(part);
}
使用以下命令安装:bashnpm install metorial @metorial/ai-sdk @ai-sdk/anthropic ai
### Pythonpythonimport asyncio
import os
from metorial import Metorial
from metorial import metorial_pydantic_ai
from pydantic_ai import Agent
async def main():
metorial = Metorial(api_key=os.environ["METORIAL_API_KEY"])
deployment = metorial.provider_deployments.create(
name="Metorial Search",
provider_id="metorial-search",
)
session = await metorial.connect(
adapter=metorial_pydantic_ai(),
providers=[{"provider_deployment_id": deployment.id}],
)
agent = Agent(
"anthropic:claude-sonnet-4-20250514",
system_prompt="You are a helpful research assistant.",
tools=session.tools(),
)
result = await agent.run(
"Search the web for the latest news about AI agents and summarize the top 3 stories."
)
print(result.output)
asyncio.run(main())
使用以下命令安装:bashpip install metorial pydantic-ai python-dotenv
## OAuth 集成
import { Metorial } from 'metorial';
import { metorialAiSdk } from '@metorial/ai-sdk';
import { anthropic } from '@ai-sdk/anthropic';
import { stepCountIs, streamText } from 'ai';
let metorial = new Metorial({ apiKey: process.env.METORIAL_API_KEY! });
let deployment = await metorial.providerDeployments.create({
name: 'Metorial Search',
providerId: 'metorial-search'
});
let session = await metorial.connect({
adapter: metorialAiSdk(),
providers: [{ providerDeploymentId: deployment.id }]
});
let result = streamText({
model: anthropic('claude-sonnet-4-20250514'),
prompt:
'Search the web for the latest news about AI agents and summarize the top 3 stories.',
stopWhen: stepCountIs(10),
tools: session.tools()
});
for await (let part of result.textStream) {
process.stdout.write(part);
}
npm install metorial @metorial/ai-sdk @ai-sdk/anthropic aiimport asyncio
import os
from metorial import Metorial
from metorial import metorial_pydantic_ai
from pydantic_ai import Agent
async def main():
metorial = Metorial(api_key=os.environ["METORIAL_API_KEY"])
deployment = metorial.provider_deployments.create(
name="Metorial Search",
provider_id="metorial-search",
)
session = await metorial.connect(
adapter=metorial_pydantic_ai(),
providers=[{"provider_deployment_id": deployment.id}],
)
agent = Agent(
"anthropic:claude-sonnet-4-20250514",
system_prompt="You are a helpful research assistant.",
tools=session.tools(),
)
result = await agent.run(
"Search the web for the latest news about AI agents and summarize the top 3 stories."
)
print(result.output)
asyncio.run(main())
pip install metorial pydantic-ai python-dotenv在处理需要用户身份验证的服务(如 Slack、GitHub、Google Calendar 或 SAP)时,Metorial 提供 setup sessions 来处理 OAuth 流程,并复用生成的 auth config。
JavaScript / TypeScripttypescriptimport { Metorial } from 'metorial';
import { metorialAiSdk } from '@metorial/ai-sdk';
let metorial = new Metorial({ apiKey: process.env.METORIAL_API_KEY! });
let setupSession = await metorial.providerDeployments.setupSessions.create({
providerId: 'your-slack-provider-id',
providerAuthMethodId: 'your-slack-auth-method-id'
});
console.log(Authenticate here: ${setupSession.url});
let completed = await metorial.providerDeployments.setupSessions.waitForCompletion([
setupSession
]);
let session = await metorial.connect({
adapter: metorialAiSdk(),
providers: [
{
providerDeploymentId: 'your-slack-deployment-id',
providerAuthConfigId: completed[0]!.authConfig!.id
}
]
});
// Pass session.tools() to your model SDK.
### Pythonpythonimport os
from metorial import Metorial
from metorial import metorial_pydantic_ai
metorial = Metorial(api_key=os.environ["METORIAL_API_KEY"])
setup_session = metorial.provider_deployments.setup_sessions.create(
provider_id="your-slack-provider-id",
provider_auth_method_id="oauth",
redirect_url="https://yourapp.com/oauth/callback",
)
print(f"Authenticate here: {setup_session.url}")
completed = await metorial.wait_for_setup_session([setup_session])
session = await metorial.connect(
adapter=metorial_pydantic_ai(),
providers=[
{
"provider_deployment_id": "your-slack-deployment-id",
"provider_auth_config_id": completed[0].auth_config.id,
}
],
)
tools = session.tools()
### OAuth 流程详解
import { Metorial } from 'metorial';
import { metorialAiSdk } from '@metorial/ai-sdk';
let metorial = new Metorial({ apiKey: process.env.METORIAL_API_KEY! });
let setupSession = await metorial.providerDeployments.setupSessions.create({
providerId: 'your-slack-provider-id',
providerAuthMethodId: 'your-slack-auth-method-id'
});
console.log(Authenticate here: ${setupSession.url});
let completed = await metorial.providerDeployments.setupSessions.waitForCompletion([
setupSession
]);
let session = await metorial.connect({
adapter: metorialAiSdk(),
providers: [
{
providerDeploymentId: 'your-slack-deployment-id',
providerAuthConfigId: completed[0]!.authConfig!.id
}
]
});
// Pass session.tools() to your model SDK.
import os
from metorial import Metorial
from metorial import metorial_pydantic_ai
metorial = Metorial(api_key=os.environ["METORIAL_API_KEY"])
setup_session = metorial.provider_deployments.setup_sessions.create(
provider_id="your-slack-provider-id",
provider_auth_method_id="oauth",
redirect_url="https://yourapp.com/oauth/callback",
)
print(f"Authenticate here: {setup_session.url}")
completed = await metorial.wait_for_setup_session([setup_session])
session = await metorial.connect(
adapter=metorial_pydantic_ai(),
providers=[
{
"provider_deployment_id": "your-slack-deployment-id",
"provider_auth_config_id": completed[0].auth_config.id,
}
],
)
tools = session.tools()
1. 创建 setup session:在 TypeScript 中调用 providerDeployments.setupSessions.create() 或在 Python 中调用 provider_deployments.setup_sessions.create()。
2. 发送 URL:将 setup session URL 展示给用户,以便他们在浏览器中进行身份验证。
3. 等待完成:等待 setup session 完成并返回 auth config。
4. 使用 auth config:在配置 providers 时传递 auth config ID。
Provider 配置示例
使用同一个 providers 列表来组合 dashboard 管理的部署、预创建的 auth configs、内联凭据以及可复用的 session 模板:
let session = await metorial.connect({
adapter: metorialAiSdk(),
providers: [
{ providerDeploymentId: 'your-search-deployment-id' },
{
providerDeploymentId: 'your-slack-deployment-id',
providerAuthConfigId: 'slack-auth-config-id'
},
{
providerDeploymentId: 'your-github-deployment-id',
providerAuthConfig: {
providerAuthMethodId: 'github-auth-method-id',
credentials: { access_token: 'ghp_...' }
}
},
{ sessionTemplateId: 'your-template-id' }
]
});session = await metorial.connect(
adapter=metorial_pydantic_ai(),
providers=[
{"provider_deployment_id": "your-search-deployment-id"},
{
"provider_deployment_id": "your-slack-deployment-id",
"provider_auth_config_id": "slack-auth-config-id",
},
{
"provider_deployment_id": "your-github-deployment-id",
"provider_auth_config": {
"provider_auth_method_id": "github-auth-method-id",
"credentials": {"access_token": "ghp_..."},
},
},
{"session_template_id": "your-template-id"},
],
)查看 SDK 示例目录以获取完整的可运行示例:
TypeScript
typescript-quick-start- Metorial Search 快速上手
typescript-ai-sdk- Vercel AI SDK + Anthropic
typescript-openai- OpenAI function calling
typescript-anthropic- Anthropic Claude tool use
typescript-google- Google Gemini function declarations
typescript-openai-compatible- 任何 OpenAI 兼容 API
typescript-langchain- LangChain 和 LangGraph
typescript-provider-config- Provider 认证和 session 模板模式
Python- pydantic-ai - PydanticAI + Anthropic
langchain- LangChain agent tools
langgraph- LangGraph streaming agent
openai-agents- OpenAI Agents SDK
llamaindex- LlamaIndex function agent
autogen- 带有 tool calls 的 AutoGen assistant
crewai- CrewAI agent tools
google-adk- 基于 Gemini 的 Google ADK
haystack- 带有 tools 的 Haystack pipeline
多供应商支持
在不同的 AI 客户端和框架中使用相同的 Metorial providers。| Provider | TypeScript adapter | Python adapter | Model examples |
| ------------- | ---------------------- | ------------------------------ | ------------------------------------------ |
| AI SDK | @metorial/ai-sdk | - | 任何通过 Vercel AI SDK 访问的模型 |
| OpenAI | @metorial/openai | metorial_openai() | gpt-4.1, gpt-4o, o1, o3 |
| Anthropic | @metorial/anthropic | metorial_anthropic() | claude-sonnet-4-5, claude-opus-4 |
| Google Gemini | @metorial/google | metorial_google() | gemini-2.5-pro, gemini-2.5-flash |
| Mistral | @metorial/mistral | metorial_mistral() | mistral-large-latest, codestral-latest |
| DeepSeek | @metorial/deepseek | metorial_openai_compatible() | deepseek-chat, deepseek-reasoner |
| TogetherAI | @metorial/togetherai | metorial_openai_compatible() | Llama-4, Qwen-3 |
| XAI | @metorial/xai | metorial_openai_compatible() | grok-3, grok-3-mini |
| LangChain | @metorial/langchain | metorial_langchain() | 任何通过 LangChain 访问的模型 |
| PydanticAI | - | metorial_pydantic_ai() | 任何通过 PydanticAI 访问的模型 |
动机MCP 是一个将 AI 模型连接到外部数据和工具的强大标准,但它侧重于使 AI 客户端(如 Claude Desktop 或 Cursor)能够连接到工具和数据源。
Metorial 基于 MCP 构建,但为开发者提供了单行代码(one-liner)即可将其 AI 应用连接到任何 API、数据源或工具的能力。 从而使开发者能够创建能够以可靠、简单且安全的方式与其他系统交互的 agentic AI 应用。Tech Stack- Model Context Protocol (MCP) - Metorial 由 Model Context Protocol 提供支持,这是一个将 AI 模型连接到外部数据和工具的标准。
- Docker - Metorial 使用 Docker 在容器化环境中运行 MCP servers,使其易于部署和管理。
- MCP Containers - Metorial 提供了一系列预构建在 Docker 容器中的 MCP servers。
- Typescript - Metorial 的大部分代码使用 TypeScript 编写。
- Bun - Metorial 的核心运行在 Bun 上,这是一个与 Node.js 兼容的高速 JavaScript runtime。
- Go - MCP engine 使用 Go 编写,为 Metorial 提供高性能的后端。
- PostgreSQL - Metorial 使用 PostgreSQL 进行数据存储。
- Redis - Metorial 使用 Redis 进行缓存和实时数据处理。
- MongoDB - Metorial 使用 MongoDB 存储使用数据和日志。
- React - Metorial Dashboard 使用 React 构建。
Features
Metorial 旨在让开发者能够极其轻松地将 AI 应用连接到外部数据和工具。基于 Model Context Protocol (MCP),Metorial 构建在标准之上。
Large Server CatalogMetorial server index 已包含超过 5000 个 MCP server。它可以让你非常轻松地为 AI 应用查找并使用 MCP server。所有内容均可搜索且组织有序,方便你根据使用场景找到合适的 server。
https://github.com/user-attachments/assets/a171030e-0159-4ce2-9e92-f4fb3f7bfdc6
Embedded MCP Explorer
直接在 Metorial Dashboard 中测试和探索 MCP server。Embedded MCP Explorer 允许你在不离开 dashboard 的情况下使用任何 MCP server,从而在编写代码前轻松测试和调试集成。
https://github.com/user-attachments/assets/eeb73085-e1d6-4745-988a-385694d26500
Monitoring and Debugging
每个 MCP session 都会被记录并可在 Metorial Dashboard 中查看。这使你能够监控并发现集成中的问题。更棒的是,如果发生错误,Metorial 会自动检测并提供详细的错误报告,以便你快速修复问题。
https://github.com/user-attachments/assets/c676411e-25b6-442a-af22-c8d99e2be25b
Built for Developers
Metorial 为开发者量身打造。以下是使其成为开发者绝佳选择的一些关键特性:- 可定制化:Metorial 高度可定制,允许您根据需求配置集成。
- 开源:Metorial 是开源的,因此您可以将其运行在自己的基础设施上,或使用我们的托管平台。
- 多实例支持:创建多个 Metorial Projects 实例,以测试集成的不同配置、环境或版本。
- 强大的 SDK:Metorial 为 JavaScript/TypeScript 和 Python 提供了强大的 SDK,使其易于与您的 AI 应用集成。
- 详细的文档:Metorial 为所有功能提供了详细文档,包括示例和教程,帮助您快速上手。
- 完整的 API 访问:Metorial 的每项功能均可通过 API 访问,允许您构建自定义集成并自动化工作流。理论上,您可以使用 API 构建自己的仪表盘。
- 高级仪表盘:Metorial Dashboard 为管理集成、监控用量和调试 MCP servers 提供了强大的界面。
License
Metorial Catalog 采用 Apache License 2.0 许可。
<div align="center">
<sub>Built with ❤️ by <a href="https://metorial.com">Metorial</a></sub>
</div>