Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Agentalog — Agent Auto Log Me API
version: 1.0.0
description: 'Agent Auto Log: catalog of MCP servers, skills and plugins with an automatic change log, plus a monitor for what your agents install.'
servers:
- url: https://agentalog.com
tags:
- name: Me
paths:
/api/me/vigia:
get:
operationId: list_watched_tools
summary: The MCP servers and skills you watch, with the current review, your slots and…
description: 'Daily checks cover MCP tools, state, level, country and version. Supported skills cover changes in SKILL.md text and review signals. Source quotas can delay a check; read proxima_em and verificado_em. The e-mail goes to the verified account address and includes an unsubscribe link. Wallet-only owners follow changes through the API.
Returns: { itens, cota, planos, claude_code, api }'
security:
- globalAccount: []
- carteiraAgente: []
responses:
'200':
description: '{ itens, cota, planos, claude_code, api }'
content:
application/json:
schema:
$ref: '#/components/schemas/Vigia'
'401':
description: 'Sign in with your account, or send the wallet credential (`Authorization: Bearer mmw_…`).'
tags:
- Me
post:
operationId: watch_tool
summary: Watch a remote MCP or supported SKILL.md.
description: 'Choose a live remote MCP or a skill with a supported public raw.githubusercontent.com SKILL.md, after skill collection is enabled. Unsupported skills are rejected before payment. Watching again is a no-op (`ja_vigiado`). Pay the 402 with x402 or prepaid credit and repeat the request. Slots last 30 days with no automatic renewal. Skills do not enter the Claude Code MCP allowlist.
Returns: { ok, id?, ja_vigiado?, cota }'
x-price-usd: 0.1
security:
- globalAccount: []
- carteiraAgente: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
listing_id:
type: string
description: Listing ID (`mcp_…` or `skl_…`) from `/api/listings`.
required:
- listing_id
example:
listing_id: mcp_io_github_upstash_context7_d016de0d
responses:
'200':
description: '{ ok, id?, ja_vigiado?, cota }'
content:
application/json:
schema:
$ref: '#/components/schemas/VigiaAlterada'
'400':
description: Invalid JSON, unavailable skill review, unsupported source or a listing that cannot be watched (`nao_vigiavel`).
'401':
description: 'Sign in with your account, or send the wallet credential (`Authorization: Bearer mmw_…`).'
'402':
description: 'No free slot: pay for one more.'
'403':
description: Missing or invalid X-CSRF-Token.
'409':
description: Expired passes leave paused tools in the list. Stop watching one or buy slots before adding another tool. A concurrent request can also use the last slot; refresh the list and retry.
tags:
- Me
/api/me/vigia/{id}:
delete:
operationId: unwatch_tool
summary: Stop watching a tool; its slot becomes free
description: 'Returns: { ok, id?, ja_vigiado?, cota }'
security:
- globalAccount: []
- carteiraAgente: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Listing ID (`mcp_…` or `skl_…`).
example: mcp_…
responses:
'200':
description: '{ ok, id?, ja_vigiado?, cota }'
content:
application/json:
schema:
$ref: '#/components/schemas/VigiaAlterada'
'401':
description: 'Sign in with your account, or send the wallet credential (`Authorization: Bearer mmw_…`).'
'404':
description: The listing is not in your watch list.
tags:
- Me
/api/me/vigia/claude-code:
get:
operationId: claude_code_allowlist
summary: 'Your watch list as Claude Code managed settings: an allowlist of the servers…'
description: '`managed_settings` goes into a Claude Code managed settings source (see `docs`). `allowManagedMcpServersOnly` restricts user-added servers to this list. Checked servers rated as `risco` go to `deniedMcpServers`. The exact URL and that URL followed by `?*` permit the checked route with optional query parameters. Expired or unchecked items stay out. `comandos` has one quoted `claude mcp add` command per allowed server.
Returns: { managed_settings, comandos, fora, aviso, docs, api }'
security:
- globalAccount: []
- carteiraAgente: []
responses:
'200':
description: '{ managed_settings, comandos, fora, aviso, docs, api }'
content:
application/json:
schema:
$ref: '#/components/schemas/ListaClaudeCode'
'401':
description: 'Sign in with your account, or send the wallet credential (`Authorization: Bearer mmw_…`).'
tags:
- Me
/api/me/listings:
get:
operationId: get_api_me_listings
summary: The owner's listings in any state, including pending and hidden
description: 'It is the only route that shows what is not live yet — the public mosaic never does. A temporary guest sees its own submissions here and keeps them when it links an account.
Returns: { items[{seguranca_nivel?,seguranca_estado?,seguranca_api?,moderation?,id,kind,category,name,tagline,body,url,status,origin,origin_id,install,source,transporte,ns,versao,oficial_status,repo_host,topico,linguagem,licenca,repo_topics,repo_slug,stars,forks,prs_abertos,pushed_at,repo_estado,likes,comments,visits,created_at,updated_at,mine,api,go,comments_api,readme_api?,historico?,readme_fonte?,readme_bytes,readme_sha,readme_em,payload}] }'
security:
- bearerAuth: []
responses:
'200':
description: '{ items[{seguranca_nivel?,seguranca_estado?,seguranca_api?,moderation?,id,kind,category,name,tagline,body,url,status,origin,origin_id,install,source,transporte,ns,versao,oficial_status,repo_host,topico,linguagem,licenca,repo_topics,repo_slug,stars,forks,prs_abertos,pushed_at,repo_estado,likes,comments,visits,created_at,updated_at,mine,api,go,comments_api,readme_api?,historico?,readme_fonte?,readme_bytes,readme_sha,readme_em,payload}] }'
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Anuncio'
description: This owner’s listings, in any state.
required:
- items
'401':
description: No credential, or an invalid one. See this endpoint's auth.
tags:
- Me
/api/me:
get:
operationId: get_api_me
summary: The session's account and, for the admin, the load state
description: 'The account is the global account; `user.id` is its id — the same id that owns the listings, likes and comments made with it, and the guest''s after the claim.
Returns: { user{id,email}, profile, admin, carga?{fontes,falhas,runs,orcamento} }'
security:
- globalAccount: []
responses:
'200':
description: '{ user{id,email}, profile, admin, carga?{fontes,falhas,runs,orcamento} }'
content:
application/json:
schema:
type: object
properties:
user:
allOf:
- $ref: '#/components/schemas/Conta'
description: The person who owns the session.
profile:
type: object
description: 'Global profile: `name`, `locale`, `timeZone`, `theme`, `revision`.'
admin:
type: boolean
description: Whether this account is the `ADMIN_EMAIL`.
carga:
allOf:
- $ref: '#/components/schemas/Carga'
description: State of the load sources; admin only.
required:
- user
- profile
- admin
'401':
description: invalid_session
'503':
description: auth_unavailable
tags:
- Me
/api/me/ui:
get:
operationId: get_api_me_ui
summary: 'The owner''s screen preferences: search, filter, sort and theme'
description: 'Exists so what the person set up survives an F5 and reopening the app on another device. A refresh is not a new screen — see AGENTS-UI.md. A guest has none: without an account there is nobody to give the data back to later, so the guest stays in the browser''s `localStorage` only.
Returns: { prefs, api }'
security:
- globalAccount: []
responses:
'200':
description: '{ prefs, api }'
content:
application/json:
schema:
$ref: '#/components/schemas/PreferenciasUi'
'401':
description: No credential, or an invalid one. See this endpoint's auth.
tags:
- Me
put:
operationId: put_api_me_ui
summary: Stores the owner's screen preferences, replacing the previous ones
description: 'It is PUT and not PATCH on purpose: the client sends the whole screen state, not a delta. Cap of 8 KB — this is a screen preference, not a blob store.
Returns: { ok }'
security:
- globalAccount: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
prefs:
type: object
description: 'The interface state to keep. Opaque to the server: any JSON within the cap works.'
required:
- prefs
example:
prefs:
q: postgres
kind: mcp
sort: likes
tema: escuro
responses:
'200':
description: '{ ok }'
content:
application/json:
schema:
$ref: '#/components/schemas/Ok'
'400':
description: Body that is not JSON (`bad_json`) or without the `prefs` key (`prefs`).
'401':
description: No credential, or an invalid one. See this endpoint's auth.
'405':
description: Method other than GET or PUT on this route.
'413':
description: Preferences above the 8 KB cap (`grande`).
tags:
- Me
components:
schemas:
Carga:
type: object
properties:
fontes:
type: array
items:
type: object
description: Each source with its last batch and the count it brought.
falhas:
type: array
items:
type: object
description: Import failures not yet marked as seen.
runs:
type: array
items:
type: object
description: The recent runs, newest first.
orcamento:
type: object
description: 'Today''s publication budget (UTC day): `total`, `catalogo` (the catalog slice) and `okf` (the OKF slice), each with `usados` (rows actually written, as D1 counts them: row, key and every index entry, reconciled after each batch), `reservado` (the estimate charged before writing; `reservado / usados` is how inflated the estimate is) and `teto`; `classes` (catalogo, okf, fatos, readmes, fts) with today''s `itens`, `reservado`, `linhas` (rows the database actually wrote) and `media` (real rows per item over the last days, the number the estimate now uses; null without history); plus `dia`.'
required:
- fontes
- falhas
- runs
- orcamento
description: The state of the catalog's load sources — where the listings come from and when they came.
Vigia:
type: object
properties:
itens:
type: array
items:
type: object
description: '`{ id, tipo, nome, vigiado_desde, valido_ate, ativa, nivel, sinais, estado, ferramentas, verificado_em, mudou_em, ficha, security }`, newest first. Skills have no MCP tool count. `valido_ate: null` is a free slot. `ativa: false` pauses checks and alerts; previous facts remain public.'
cota:
type: object
description: '`{ total, gratis, pagas, usadas, livres }`: free slots (3 per account) plus purchased slots still valid.'
planos:
type: array
items:
type: object
description: The house plans, as in `GET /api/plans` (`id`, `name`, `watched_tools`, `days`, `price_usd`, `automatic_renewal`, `charged_now`, `buy`), with `projects` and `installations`. Buy with `POST /api/plans/:plan`.
claude_code:
type: string
description: Absolute URL of the Claude Code export.
api:
type: string
description: Absolute URL of this route.
required:
- itens
- cota
- planos
- claude_code
- api
description: The account's watch list.
Anuncio:
type: object
properties:
seguranca_nivel:
type: string
description: 'Remote MCP or skill check: risco, atencao, ok, or empty when not checked.'
seguranca_estado:
type: string
description: Remote MCP probe result. login means the check could not read actions without credentials; ok alone does not mean full coverage.
seguranca_api:
type: string
description: URL of the measured security results.
moderation:
type: object
description: 'Admin responses only: reason and reviewed_at from automatic moderation. Empty values mean no automatic decision.'
id:
type: string
description: Listing ID; it is the key across the whole API.
kind:
type: string
description: What this listing is.
enum:
- mcp
- skill
- plugin
category:
type: string
description: Category chosen by whoever published.
nullable: true
name:
type: string
description: Display name.
tagline:
type: string
description: One line saying what it is for.
nullable: true
body:
type: string
description: Long description from the submission or automatic review.
nullable: true
url:
type: string
description: Where the resource lives — the MCP endpoint, the SKILL.md or the repository.
status:
type: string
description: State in the catalog.
enum:
- pending
- live
- hidden
- blocked
origin:
type: string
description: 'Where the listing came from: `official`, `marketplace`, `directory` or a community submission.'
origin_id:
type: string
description: Identifier of the listing at the source.
nullable: true
install:
type: string
description: How to install, when the source says.
nullable: true
source:
type: string
description: Source code URL, when known.
nullable: true
transporte:
type: string
description: 'MCP transport: `stdio`, `http`, `sse`.'
nullable: true
ns:
type: string
description: Server namespace in the official registry.
nullable: true
versao:
type: string
description: Version declared by the source.
nullable: true
oficial_status:
type: string
description: State in the official MCP registry, when applicable.
nullable: true
repo_host:
type: string
description: Where the repository is hosted, e.g. `github`.
nullable: true
topico:
type: string
description: Inferred topic used in search filters, not a publisher declaration. When available, `payload.topico_llm` carries the supporting quote and confidence.
nullable: true
linguagem:
type: string
description: Primary language of the repository, when collected.
nullable: true
licenca:
type: string
description: SPDX license of the repository, when collected.
nullable: true
repo_topics:
type: string
description: Repository topics, separated by spaces.
nullable: true
repo_slug:
type: string
description: owner/name of the repository, when known.
nullable: true
stars:
type: integer
description: Repository stars at the last check.
nullable: true
forks:
type: integer
description: Repository forks at the last check.
nullable: true
prs_abertos:
type: integer
description: Open pull requests at the last check.
nullable: true
pushed_at:
type: string
description: Last push to the repository (UTC).
nullable: true
repo_estado:
type: string
description: How the repository is doing (active, stalled, archived, renamed, gone).
nullable: true
enum:
- ativo
- parado
- arquivado
- renomeado
- sumiu
- null
likes:
type: integer
description: How many people liked it — the like is reversible and counts people.
comments:
type: integer
description: Public comments on the listing.
visits:
type: integer
description: Visits counted by the hop; at most 1 per owner per day.
created_at:
type: string
description: When it entered the catalog (UTC).
updated_at:
type: string
description: Last change (UTC).
nullable: true
mine:
type: boolean
description: '`true` when the listing is yours — only then can you edit it.'
api:
type: string
description: Absolute URL of this listing's page.
go:
type: string
description: 'Hop URL: redirects to `url` and counts the visit.'
comments_api:
type: string
description: Absolute URL of this listing's comments.
readme_api:
type: string
description: 'Absolute URL of the collected README (`GET`). On list rows and on the listing page, and only when a README was stored: absent means none was collected — do not build the path yourself.'
historico:
type: array
items:
type: object
description: 'Listing page only: the repository''s last events, as in `/api/listings/:id/history`; absent when there is none yet.'
readme_fonte:
type: string
description: 'Where the README came from: `repo` (the GitHub repository''s README) or `npm` / `pypi` (the package registry''s README, used when the listing has no repository). Present together with `readme_api`.'
readme_bytes:
type: integer
description: Size of the collected README in bytes, on list rows and on the listing page; 0 when none was collected.
readme_sha:
type: string
description: SHA-256 of the collected README. Listing page only.
nullable: true
readme_em:
type: string
description: When the README was stored (UTC). Listing page only.
nullable: true
payload:
type: object
description: 'Install payload mirrored from the source. Listing page only. When the topic came from the model, `topico_llm` holds `{topico, confianca, trecho, v}`: the label, the confidence (0–1), the literal quote that justified it and the rule version.'
nullable: true
required:
- id
- kind
- category
- name
- tagline
- body
- url
- status
- origin
- origin_id
- install
- source
- transporte
- ns
- versao
- oficial_status
- repo_host
- topico
- linguagem
- licenca
- repo_topics
- repo_slug
- stars
- forks
- prs_abertos
- pushed_at
- repo_estado
- likes
- comments
- visits
- created_at
- updated_at
- mine
- api
- go
- comments_api
- readme_bytes
- readme_sha
- readme_em
- payload
description: 'A catalog listing: MCP server, Agent Skill or Claude Code plugin.'
Ok:
type: object
properties:
ok:
type: boolean
description: Always `true` — failure comes as a 4xx/5xx status, not as `ok:false`.
required:
- ok
description: Write confirmation with no body of its own to return.
VigiaAlterada:
type: object
properties:
ok:
type: boolean
description: '`true` when the change succeeded.'
id:
type: string
description: The listing, when the change was about one.
ja_vigiado:
type: boolean
description: '`true` when the listing was already watched.'
cota:
type: object
description: '`{ total, gratis, pagas, usadas, livres }`: free slots (3 per account) plus purchased slots still valid.'
required:
- ok
- cota
description: The result of a change to the watch list.
PreferenciasUi:
type: object
properties:
prefs:
type: object
description: The stored preferences, as the interface wrote them. `{}` when nothing was ever stored.
api:
type: string
description: Absolute URL of this route.
required:
- prefs
- api
description: 'What the person set up on the screen and needs to survive an F5: filter selection, active tab and open item tabs. The content is OPAQUE — the server does not interpret the JSON, it only stores and returns it, so the screen can change fields without a database migration.'
Conta:
type: object
properties:
id:
type: string
description: ID of the account.
email:
type: string
description: E-mail confirmed by code.
required:
- id
- email
description: The person behind the session.
ListaClaudeCode:
type: object
properties:
managed_settings:
type: object
description: '`{ allowManagedMcpServersOnly: true, allowedMcpServers: [{ serverUrl }], deniedMcpServers: [{ serverUrl }] }`.'
comandos:
type: array
items:
type: string
description: One `claude mcp add` per allowed server.
fora:
type: array
items:
type: string
description: 'Watched listings left out: skills, expired, hidden, unchecked or without a valid fixed MCP URL.'
aviso:
type: string
description: How to deploy the settings.
docs:
type: string
description: Claude Code documentation for managed MCP settings.
api:
type: string
description: Absolute URL of this route.
required:
- managed_settings
- comandos
- fora
- aviso
- docs
- api
description: The watch list as Claude Code managed settings.
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Guest mr_… or ADMIN_TOKEN; the account is a cookie, never a bearer.
monitorReader:
type: http
scheme: bearer
bearerFormat: mmq_…
description: Read one private project's event cursor only. No ingestion, approval or purchase. Do not mix with cookies.
monitorInstallation:
type: http
scheme: bearer
bearerFormat: mmi_…
description: One private installation and project. No approval, purchase or credential issuance.
monitorNotices:
type: http
scheme: bearer
bearerFormat: mmn_…
description: Product notice service only. Reserve, start and confirm; no account or installation authority.
x402:
type: apiKey
in: header
name: X-PAYMENT
description: x402 payment per call (USDC on Base). Call without it to get the 402 with `accepts`; sign the authorization and repeat with the base64 payment in X-PAYMENT.
globalAccount:
type: apiKey
in: cookie
name: __Host-mm-auth
description: Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token.
contaChaveApi:
type: http
scheme: bearer
bearerFormat: mmk_…
description: 'Account API key: `Authorization: Bearer mmk_…` or `X-Api-Key: mmk_…`. Created on the account page (API keys), valid only in the product where it was created; it acts as the account (or the organization that owns it).'
carteiraAgente:
type: http
scheme: bearer
bearerFormat: mmw_…
description: 'Wallet credential of an agent without an account (`Authorization: Bearer mmw_…`, 30 days, this product only): POST /api/auth/wallet/agent/start, sign the message with the wallet, POST /api/auth/wallet/agent/token. The owner is `x402:<address>`.'
x-service-info:
categories:
- ai-agents
- mcp
- directory
docs:
homepage: https://agentalog.com/
apiReference: https://agentalog.com/developers
llms: https://agentalog.com/llms.txt
x-provenance:
method: harvested
publisher: Meta Agent Tools
source: https://agentalog.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)