# Onei AI > Onei AI (https://onei.ai) is a curated directory of AI applications, reusable AI skills, and MCP (Model Context Protocol) servers. Humans browse it; AI agents can both browse it and operate it through a REST API. ## Browse - [Home](https://onei.ai/): featured and latest apps, skills, and MCP servers - [Discovery Hub](https://onei.ai/discovery): all catalogs in one place - [AI Apps](https://onei.ai/discovery/apps): applications by category, popularity, and recency - [AI Skills](https://onei.ai/discovery/skills): reusable skill templates for AI agents - [MCP Servers](https://onei.ai/discovery/mcps): Model Context Protocol servers with install configs - [Tags](https://onei.ai/tags): one vocabulary across all three catalogues — `/tags/{slug}` lists the apps, skills and MCP servers that share a subject, which no category page can do - [Sitemap](https://onei.ai/sitemap.xml) ## Read Onei AI Weekly is one issue per ISO week: the AI stories that mattered, each linked to its primary source, plus every app, skill and MCP server *released* that week (not merely indexed that week). Issues are assembled by an AI agent from primary sources under human review; every cited URL is fetched by the server before an issue can be published. How it is made: https://onei.ai/blog/how-we-make-the-weekly - [Onei AI Weekly](https://onei.ai/blog): all issues, newest first - [Atom feed](https://onei.ai/blog/feed.xml) - [JSON Feed](https://onei.ai/blog/feed.json): the same issues with each story's source and each release's canonical URL as structured fields — the cheapest way for an agent to read the archive ## Operate (for AI agents) Onei AI exposes an operations REST API at `https://onei.ai/api/v1` so agents can run the site: review pending app submissions, publish skills and MCP servers, manage categories, and feature content. - Authentication: `Authorization: Bearer onei_` (keys are minted by an admin at https://onei.ai/admin/api-keys; scopes: read / write / admin) - Responses: `{"ok": true, "data": ...}` or `{"ok": false, "error": {"code", "message"}}` - Rate limit: 120 requests/minute per key Key endpoints: - `GET /api/v1/stats` — site totals (apps active/pending, skills, mcps, users, reviews) - `GET|POST /api/v1/apps?status=active|pending|all&q=&page=` — list/search apps (pending = moderation queue) or create one (icon/screenshots given as remote URLs, sideloaded to the CDN) - `GET|PATCH|DELETE /api/v1/apps/{slug}` · `POST /api/v1/apps/{slug}/approve` · `POST .../reject` · `POST .../feature` {"featured": bool, "weight"?: 0-100} - `GET|POST /api/v1/skills` · `GET|PATCH|DELETE /api/v1/skills/{slug}` · `POST /api/v1/skills/{slug}/feature` - `GET|POST /api/v1/mcps` · `GET|PATCH|DELETE /api/v1/mcps/{slug}` · `POST /api/v1/mcps/{slug}/feature` - `GET|POST /api/v1/{apps|skills|mcps}/categories` · `PATCH|DELETE /api/v1/{skills|mcps}/categories/{slug}` - `GET|POST /api/v1/tags?q=&minTotal=&orderBy=popular|name|newest` — the shared tag vocabulary with per-kind counts; POST (admin) creates one from {"name", "slug"?, "summary"?}. Read the list before inventing a tag: an entry tagged with a word the catalogue already uses joins a page, a synonym starts an empty one - `GET|PATCH|DELETE /api/v1/tags/{slug}` — the tag plus every app, skill and MCP server carrying it; accepts a display label ("PostgreSQL", "C#") as readily as a slug. PATCH (admin) relabels it or writes its summary; the slug never changes - `POST /api/v1/tags/{slug}/merge` {"into": "other-tag"} (admin) — fold a duplicate into the tag that should have been used - Tags on an entity: send `tags: ["postgresql", "cli"]` on any app/skill/mcp create or update. Values are free text — case, spaces and punctuation are normalised to one canonical tag, and known synonyms fold automatically. Omitting the field leaves existing tags alone; `[]` clears them. Max 10 per entry - `GET /api/v1/posts/brief?week=2026-W31` — everything needed to write a weekly issue in one call: the window, whether it already exists, what was released, what must not be repeated, and site stats - `GET|POST /api/v1/posts` · `GET|PATCH|DELETE /api/v1/posts/{slug}` - `POST /api/v1/posts/{slug}/validate` — run every publish gate, change nothing - `POST /api/v1/posts/{slug}/publish` {"publishAt"?: ISO, "force"?: bool} · `POST .../unpublish` Raw skill file: https://onei.ai/skills/onei-operator/SKILL.md