最新资讯
www.infoq.com Edera 推出 Object Capability Bounded Authority,试图将凭证与 AI Agent 工作负载隔离 wechat 这波杀疯了!旗舰级模型不限量、1个月视频额度免费领 dev.to 如何在专用 GPU 服务器上用 OpenAI 兼容 API 部署 LLM dev.to 审计 153 份 Claude Code 与 Codex 会话记录:User-Agent 与 URL 中的邮箱泄露 dev.to 你的 Agent Harness 应具备的 17 项能力 dev.to 离线 AI 记忆中 0.8 余弦阈值为何失效 dev.to Kimi K3.1 Pro 开放权重:自托管 2.8T 模型前的开发者清单 dev.to 如何通过工具调用引导模型以提升 Harness 质量 dev.to AI Agent 审计轨迹不等于对话记录 dev.to 精简 MCP server 工具数量:更少工具、更小影响面,双重收益 dev.to 为什么 git checkout 无法撤销 AI 编码 agent 的改动? wechat AI短剧门槛降降降!实测即梦短剧工作室:剧本分镜预演一条龙,伙伴计划长期护航
多元动态
登录 注册
智能体 github.com · @monid-ai

monid-ai/monid 发布 catalog-v0.0.4

原文 我的收藏

Monid 发布 catalog-v0.0.4,release 说明仅为“catalog publish”,无具体变更细节。仓库文档显示 Monid 定位为“agent 工具的 OpenRouter”:通过单一 base URL 和密钥接入 72+ 提供商的 2000+ 工具,覆盖网页搜索与抓取、人物与公司信息补全、社交平台、评论与市场数据、视频/图像/语音生成;按调用计量,discover 可按任务跨提供商排序并返回价格、健康状态与观测到的 p50/p95 延迟,连接器为声明式定义,可通过 PR 添加。

AI推荐理由 该 release 本身仅有一句“catalog publish”,无具体变更说明,信息密度低;但正文附带的仓库 README 披露了 Monid 作为“agent 工具版 OpenRouter”的定位:单一 base URL/密钥接入 72+ 提供商的 2000+ 工具,按调用计量、discover 按任务跨提供商排序并返回价格与 p50/p95 延迟、连接器为声明式可提交 PR。这些是产品机制层面的具体新信息,对 Agent 工具集成与调用路由有参考价值;但 release 无实质更新内容,且 README 属仓库文档而非本次发布变更,故质量分受限。

62

正文

Official release notes (https://github.com/monid-ai/monid/releases/tag/catalog-v0.0.4) catalog publish Repository README (current repository documentation, not release changes) monid.ai  ·  Docs  ·  Tool catalog  ·  Quickstart  ·  Development guide # Monid (OpenRouter for agent tools) **OpenRouter, but for agent tools.** One base URL, one key, and an agent can reach **2,000+ tools across 72+ providers**: web search and scraping, people and company enrichment, social platforms, reviews and market data, and video, image and voice generation. > **Are you an AI agent?** Fetch `https://monid.ai/SKILL.md` and save it to your > skill directory. It does the rest. **This repo is the connector layer**, the one generic framework every endpoint above is described in: how it is called, what it accepts, what it returns, how its usage is counted. A connector is declarative, so a coding agent can write one. Point it at your API docs and at this repo, and adding your API to Monid becomes a pull request. ## Why it exists **Usage is metered per call.** Every connector declares its own usage model in the definition: a flat charge per call, a charge per returned result, or a rate per unit such as a thousand characters or a second of video. The engine settles that model on the raw response envelope, before any output mapping, so what is billed is what came back over the wire. A vendor error, an unmatched company, an unresolved person: each of those completes as data and settles at zero. **The endpoint is chosen per call.** `discover` ranks the whole catalog by what the job is, across every provider at once, and returns each candidate with its price, its live health and its observed p50 and p95 latency, plus hints naming a cheaper or better-fitting endpoint. The API is picked at call time against everything available, not pinned in code months earlier to the one vendor that happened to get integrated. ## How an agent uses it Three verbs, and the first two are free. ![discover and inspect are free, run is billed per use](assets/monid-verbs.png) # Writing a connector A connector describes one provider and its endpoints. Adding one is a pull request, and once it merges those endpoints are in `discover` for every agent on the platform. ## The shape A **provider** declares identity, auth, and how usage is counted: ```ts // connectors/tinyfish/provider.ts export default defineProvider({ name: "tinyfish", meta: { displayName: "TinyFish", summary: "Zero-cost live-web search and clean multi-URL fetch.", homepageUrl: "https://tinyfish.ai", categories: ["web-search"], }, auth: { inject: presets.auth.header("X-API-Key") }, usage: { model: { kind: UsageModelKind.FREE } }, }); ``` An **endpoint** declares the request and the input schema: ```ts // connectors/tinyfish/endpoints/search/endpoint.ts export default defineEndpoint({ meta: { displayName: "TinyFish Web Search", summary: "Search the live web, news, or research papers.", description: "Browser-rendered search over the live web. Results are " + "never cached, so pricing pages and breaking news are current at " + "query time. Snippets only: pipe result URLs into TinyFish /fetch " + "when you need full text.", docsUrl: "https://docs.tinyfish.ai/search-api/reference", categories: ["web-search", "news-search"], }, endpoint: "/search", request: { method: "GET", path: "/", baseUrl: "https://api.search.tinyfish.ai", }, input: { schema: { queryParams: zTinyfishSearchQueryParams } }, timeouts: { requestMs: 15_000, runMs: 20_000 }, }); ``` That is the whole contract. No client, no adaptor, no per-provider execution path. Providers whose product is a durable OWNED thing (saperly's phone numbers) additionally declare a **resource** (`resources//resource.ts`): its stored-snapshot shape, platform lifecycle (verify/release/refresh), live views, and its usage rate card (fixed and/or estimated lines over one period clock). Endpoints then BIND to it (`resources: { uses: [{ id, key }] }` et al., purpose-keyed) and the engine derives the rest — ownership gating, gated instances into fns, provision seeds, release/refresh/reconcile marks (see DEVELOPMENT.md "Resources"). **Write `meta.description` like it is the product, because to an agent it is.** It is the text `discover` ranks and `inspect` returns. Say what the endpoint really does, what it will not do, and which endpoint to reach for instead. The TinyFish description above ends by naming its own successor, and that sentence is worth more than any number of parameter docs. ## Quickstart Requires [Deno](https://deno.com) 2.x. ```bash git clone https://github.com/monid-ai/monid.git cd monid deno task check && deno task test # types + 188 replay tests, zero network ``` Run a real endpoint with your own vendor key: ```bash export TINYFISH_CREDENTIALS_API_KEY=... deno task engine:run 'tinyfish#search' \ --query-params '{"query":"solid-state battery suppliers","domain_type":"news"}' ``` Browse the compiled catalog: ```bash deno task catalog providers # what exists deno task catalog endpoints --provider exa # under one provider deno task catalog endpoints --category web-search deno task catalog inspect 'exa#search' # one endpoint's full contract ``` ``` connectors// ├── provider.ts # defineProvider: name, meta, auth, defaults ├── schema/ # provider-shared zod: fragments used by 2+ endpoints └── endpoints// ├── endpoint.ts # defineEndpoint (id "#" inferred) ├── schema/inputs.ts # request schemas, this endpoint only ├── endpoint.test.ts # replay + gated live tests └── fixtures/*.json # recorded responses, trimmed ``` 1. Read [`connectors/exa/`](connectors/exa), the reference implementation, and the authoring guide in [DEVELOPMENT.md](./DEVELOPMENT.md). 2. Write the provider and the endpoint. 3. Record a fixture with `deno task record`, then keep it trimmed. 4. `deno task check && deno task test` must pass with no network. 5. Open a pull request. Tests replay from fixtures, so CI needs no vendor keys. Live tests run only when the provider's credentials are in the environment, and skip otherwise. Each credential field has its own variable, `_CREDENTIALS_` — so a one-key provider reads `EXA_CREDENTIALS_API_KEY` (the bare `EXA_API_KEY` still works) and a two-key provider reads `CONTACTOUT_CREDENTIALS_WORK_API_KEY` and `CONTACTOUT_CREDENTIALS_PERSONAL_API_KEY`. ### Let an agent write it The format above is declarative and the contract is written down, so step 2 is work a coding agent can do. [AGENT.md](./AGENT.md) is the brief: give it that file, your own API docs, and `connectors/exa/` as the worked example, and it can produce the provider, the endpoint schemas and the tests. Because CI is typecheck plus replayed fixtures with no network, what comes back either compiles against the contract or does not, and the review is about whether the connector describes your API correctly rather than about whether it runs. Apify actors have a head start: `deno task apify:scaffold ` reads the actor's published input schema from the Apify API and generates the endpoint's `schema/inputs.ts` as static zod for you to review and commit. It needs `APIFY_CREDENTIALS_API_KEY`. # How it runs What the compiler and the engine do with the files you just wrote. You do not need this to add a connector, but it is why the format looks the way it does. ## Compile ![Definitions compile into one atomic bundle, then link into a sealed unit the engine runs](assets/monid-compile.png) Functions in a definition are replaced by content-hash references, and each distinct source is interned once, git-blob style, so the hash doubles as a tamper check. An endpoint executes from a **sealed unit**: its document plus the functions it actually references, passed by value into the engine. Nothing else is in scope. That is what makes one artifact run three ways without branching: **locally** with your own vendor key, **in CI** replayed against fixtures with no network, and **in the hosted platform**, where credentials are injected inside the transport and never enter the engine process. ## The engine pipeline Identical for every provider: 1. validate input against the compiled JSON Schema 2. `input.toRequest` builds the request, with auth still unexecuted 3. the transport executes it and injects credentials inside the port 4. `usage.consolidate` settles on the raw envelope, before any output mapping, so billing anchors to the wire 5. `output.fromResponse` maps the result, and the final output is validated against the declared contract A vendor's non-2xx response is **data, not an exception**: the run completes and settles at zero usage. Load gates fail closed in order, and a run-time breach of a declared contract is its own error class rather than a corrupted result. ## Repo layout ``` connectors/ provider + endpoint definitions (the part you will write) engine/ load, link, execute; transports; host ABI shared/core the contract: def, doc, hook, and bundle schemas shared/compiler pure def to doc mapping, fn normalization and interning shared/testing sealed-unit test harness, fixture record and replay scripts/ CLI entrypoints (compile, run, catalog, record) openspec/ spec-driven changes; the decision record config.yml schema.* and compiler.* are contract; engine and scripts are tooling ``` ## Learn more - [DEVELOPMENT.md](./DEVELOPMENT.md) covers hooks, the compiler, usage and billing, configuration, versioning, catalog publishing, and the full CLI reference. - `openspec/changes/*/design.md` is the decision record, with the rationale behind every choice above. - [AGENT.md](./AGENT.md) is the brief to hand a coding agent you point at this repo. ## Citation ```bibtex @misc{monid2026, author = {{Monid}}, title = {Monid {API}}, url = {https://monid.ai/}, year = {2026}, note = {Aggregation layer of API tools for AI agents with per-call pricing} } ``` ## License MIT. See [LICENSE](./LICENSE).

来源报道 · 1 篇 · 以下链接均前往原始媒体

monid-ai monid-ai/monid 发布 catalog-v0.0.4 09-30 · 原文发布
← 返回精选动态 原文

更多内容