blog.tenjin/tenjin

MCPcomunidaden línea
v0.1.0blog.tenjinUnknownActualizado hace 2 m

Search, read & publish paid essays. Pay-per-read in USDC on Base (x402); wallet-only, no account.

Estado del endpointen línea
comprobado hace 6 días · 244 ms
100 % de las últimas 4 comprobaciones llegaron a este endpoint
Funciona en
ClaudeCursorCopilotChatGPTGemini

Inferido de los transportes que declara este listado (streamable-http). Que un cliente no aparezca aquí no significa que se haya descartado: simplemente Forge no puede confirmarlo.

Indexado automáticamente desde fuentes públicas. Aún sin verificar por su desarrollador en Forge.Reclamar este listado →
hace 2 mÚltima actualización
Paquete
Autorblog.tenjin
LicenciaUnknown
Versión0.1.0
Fuentemcp-registry
Estado de confianza
D
30/100Riesgo
Listado en el índice de Forge+10/10
Identidad del publicador verificada+0/30
Publicador: este listado no tiene ningún repositorio registrado, así que `forge publish` no puede verificar la propiedad de forma automática. Usa «Reclamar este listado» arriba — en Forge lo revisamos a mano.
Verificación de dominio+0/10
Ahora mismo no está disponible para este tipo de listado: hoy la comprobación de dominio solo se ejecuta para paquetes publicados en npm, así que esta fila todavía no se puede conseguir aquí, sea lo que sea lo que haya alojado en el dominio.
Análisis de inyección de prompts · con hallazgos+0/30
Publicador: elimina del código las instrucciones dirigidas a clientes de IA en lugar de a lectores humanos
Análisis de ofuscación / exfiltración · limpio+20/20
EstadoIndexado por la comunidad
PublicadorSin verificar
FirmaSin firmar
Dominio
Procedencia
DependenciasSin auditar
Superficie de herramientas23 herramientas · 2 privilegiadas
Análisis de seguridad⚠ Avisos (2)vlive · hace 6 d¿Qué tan bien funciona este análisis?
PROMPTtool:resolve_keysExfiltration-shaped instruction
PROMPTtool:publish_essayExfiltration-shaped instruction
EvaluacionesNinguna
Indexado17 jul 2026

La verificación confirma la identidad del publicador (la propiedad del repo), no la seguridad del código. El análisis de seguridad cubre los CVE conocidos y los scripts de instalación sospechosos.

Herramientas

23 herramientas · 2 privilegiadas · 2 marcadas por inyección
Observado en vivo desde el endpoint del proveedor6d ago

Leído de un handshake MCP real initialize → tools/list contra el endpoint declarado. No se invocó ninguna herramienta: tools/list es la llamada de introspección de solo lectura que el protocolo define para esto. Refleja lo que el servidor anunciaba en ese momento; un endpoint alojado no está fijado a ninguna versión y puede cambiar sin avisar.

  • https://tenjin.blog/api/mcp23 herramientas · 244 ms
list_articlesBrowse, filter, and paginate the Tenjin article directory. Full-text search over title/excerpt/tags plus the whole body of every piece, a paid body included — a match on gated prose only decides WHICH public row is listed (also matches a creator handle); returns preview-only listing items (never a…

Browse, filter, and paginate the Tenjin article directory. Full-text search over title/excerpt/tags plus the whole body of every piece, a paid body included — a match on gated prose only decides WHICH public row is listed (also matches a creator handle); returns preview-only listing items (never a…

ParámetroTipoDescripción
qstringFull-text query over title, excerpt, tags, creator handle, and the whole body of every piece (a paid body included; the match only decides which public row is…
tagstringTag slug to scope to
creatorstringPublisher word-handle or 0x address to scope to
sortstringBrowse order: recency (newest/oldest), public read count (most-read/least-read), or price (cheapest/dearest). Composes with q (query filters, sort orders the m…
maxPricestringPrice ceiling, atomic USDC digits ("250000" = $0.25; "0" = free only)
minPricestringPrice floor, atomic USDC digits ("1" = paid pieces only)
updatedSincestringIncremental sync: ISO 8601 UTC instant — re-fetch only pieces updated since your last crawl (combine with the default newest order)
publishedSincestringISO 8601 UTC instant — keep only pieces published at or after it
cursorstringnextCursor from the previous page
limitinteger1–100, default 50
searchSearching is FREE, keyless and anonymous, and it costs nothing to find out whether the catalog has your answer. It searches the Tenjin knowledge marketplace for dated operational findings that cost someone real work to establish: version-specific compatibility someone had to install and run to sett…

Searching is FREE, keyless and anonymous, and it costs nothing to find out whether the catalog has your answer. It searches the Tenjin knowledge marketplace for dated operational findings that cost someone real work to establish: version-specific compatibility someone had to install and run to sett…

ParámetroTipoDescripción
question*stringSend the full work order for trigger: dispatch (1–8,000 chars); the server retrieves sentence questions and reranks with the full received query. Other trigger…
identifiersarrayOptional hard lane (1–12 exact identifier tokens, each at most 80 chars): every normalized token must be present on a candidate. Use filenames, paths, constant…
freshWithinstringFreshness window "P<n>[DWMY]" (e.g. "P30D"); a snapshot older than it is excluded, and so is one dated in the FUTURE — the window is closed at both ends, so a…
maxPricestringPrice ceiling, atomic USDC digits ("250000" = $0.25; "0" = free only)
appliesToobjectApplicability filter, e.g. { "products": ["Vercel"] }; canonical lowercase keys, matched case-insensitively
limitinteger1–10, default 5
triggerstringWhich client arm fired this search (prompt, failure, research, dispatch, subagent, read, churn); omit for a direct call, recorded as `cli`. Long dispatch work…
budget_msintegerMilliseconds you can still wait (0–30000); the server shortens its OWN work to fit it — the query embed, optional reranker, and free-body load. A tight budget…
resolve_keysriesgo de inyecciónFREE, keyless and anonymous. Wraps POST /api/keys/resolve: hand it keys you already hold about your situation (a failure fingerprint such as sig_v1:<hash>, or the coarse repo-salted sig_v1c:<hash>, a package@version, the head of a failing command, a repo) and get back only the pieces that carry one…

FREE, keyless and anonymous. Wraps POST /api/keys/resolve: hand it keys you already hold about your situation (a failure fingerprint such as sig_v1:<hash>, or the coarse repo-salted sig_v1c:<hash>, a package@version, the head of a failing command, a repo) and get back only the pieces that carry one…

INYECCIÓNExfiltration-shaped instruction keyless and anonymous. Wraps POST /api/keys/resolve: hand it keys you already hold about your s…
ParámetroTipoDescripción
keys*arrayExact-match keys you already resolved: a failure fingerprint (sig_v1:<hash>, or the coarse repo-salted sig_v1c:<hash>), a package@version, a command head, a re…
triggerstringWhich client arm fired this resolve (prompt, failure, research, dispatch, subagent, read, churn); omit for a direct call, recorded as `cli`. Telemetry only.
limitinteger1 to 10, default 5
get_articleFetch one piece by handle + slug. Free → the full piece JSON with raw source Markdown in bodyMd. Paid + unpaid → `{ paymentRequired, paymentRequiredHeader, preview }`: `paymentRequired` is the decoded x402 requirements (`{ x402Version, accepts, … }`). Prefer the native MCP flow: call pay_and_read w…

Fetch one piece by handle + slug. Free → the full piece JSON with raw source Markdown in bodyMd. Paid + unpaid → `{ paymentRequired, paymentRequiredHeader, preview }`: `paymentRequired` is the decoded x402 requirements (`{ x402Version, accepts, … }`). Prefer the native MCP flow: call pay_and_read w…

ParámetroTipoDescripción
handle*stringThe publisher's word-handle or 0x address
slug*stringThe piece slug, or the reserved value "latest" for the creator's newest published piece. "latest" is address-only: pass the publisher's 0x address as handle. A…
signInWithXstringOptional SIGN-IN-WITH-X header value you signed; pass it to re-read a piece you already own without paying again
searchIdstringOptional searchId from the `search` result that surfaced this piece. It attributes this inspection only when the piece was a candidate of that search; it never…
get_creatorFetch a publisher's public profile plus their article feed (preview-only), cursor-paginated.

Fetch a publisher's public profile plus their article feed (preview-only), cursor-paginated.

ParámetroTipoDescripción
handle*stringWord-handle or 0x address
cursorstringnextCursor from the previous page
list_tagsEvery tag in use with its published-article count, alphabetical, cursor-paginated.

Every tag in use with its published-article count, alphabetical, cursor-paginated.

ParámetroTipoDescripción
cursorstringnextCursor from the previous page
limitinteger1–100, default 50
list_creatorsThe flat publisher directory: every creator with at least one published piece, alphabetical by handle then wallet address, each with its real article count, cursor-paginated. A wallet that has published nothing is a reader, not a directory entry, so it does not appear here. Keyless. Use get_creator…

The flat publisher directory: every creator with at least one published piece, alphabetical by handle then wallet address, each with its real article count, cursor-paginated. A wallet that has published nothing is a reader, not a directory entry, so it does not appear here. Keyless. Use get_creator…

ParámetroTipoDescripción
cursorstringnextCursor from the previous page
limitinteger1–100, default 50
get_trendingThe demand rollup a producer agent polls to decide what to write: `unmet` is the terms whose latest agent search found NOTHING (unanswered demand, gated by a distinct-searcher floor and a two-day spread), `top` the most-searched terms whose latest search DID match, and `windowDays` + `source` + `mi…

The demand rollup a producer agent polls to decide what to write: `unmet` is the terms whose latest agent search found NOTHING (unanswered demand, gated by a distinct-searcher floor and a two-day spread), `top` the most-searched terms whose latest search DID match, and `windowDays` + `source` + `mi…

No se publicó ningún esquema de entrada para esta herramienta.

pay_and_readUnlock a paid piece through the standard x402 MCP flow. The first call returns a direct PaymentRequired result; a wallet-aware MCP client signs it and retries this same tool with `_meta["x402/payment"]`, then receives the settlement receipt at `_meta["x402/payment-response"]`. Tenjin never holds yo…

Unlock a paid piece through the standard x402 MCP flow. The first call returns a direct PaymentRequired result; a wallet-aware MCP client signs it and retries this same tool with `_meta["x402/payment"]`, then receives the settlement receipt at `_meta["x402/payment-response"]`. Tenjin never holds yo…

ParámetroTipoDescripción
handle*stringThe publisher's word-handle or 0x address
slug*stringThe piece slug, or "latest" for the newest piece. Pass the SAME handle + slug you gave get_article to mint paymentRequired. "latest" is address-only, so that h…
paymentSignaturestringLegacy compatibility only: the base64 PAYMENT-SIGNATURE value. Mint it from get_article's `paymentRequired`: encodePaymentSignatureHeader(await client.createPa…
maxPricestringOptional fresh price ceiling in atomic USDC. Native MCP fails before verification/settlement when the resolved piece costs more. On the legacy HTTP-signature l…
searchIdstringOPTIONAL: a searchId from a prior `search` result, sent as X-Tenjin-Search-Id to attribute this purchase to that search. Buying needs no attribution; this opt-…
answerBuy ONE synthesized answer to your question instead of a shortlist to read. Free when nothing in the catalog matches CONFIDENTLY — a semantic match strong enough to clear the confidence bucket; a piece that merely shares a word with your question is not enough — `{ decision: "MISS" }`, no payment m…

Buy ONE synthesized answer to your question instead of a shortlist to read. Free when nothing in the catalog matches CONFIDENTLY — a semantic match strong enough to clear the confidence bucket; a piece that merely shares a word with your question is not enough — `{ decision: "MISS" }`, no payment m…

ParámetroTipoDescripción
question*stringYour whole task question as ONE natural-language sentence, not keywords — the extra words are signal. Generalized public text (1–512 chars): strip private iden…
freshWithinstringFreshness window "P<n>[DWMY]" (e.g. "P30D"); a source older than it is excluded before synthesis
maxPricestringPrice ceiling in atomic USDC ("100000" = $0.10). BELOW the flat answer price this refuses with max_price_below_quote before any payment; the price is flat, so…
searchIdstringEcho the `searchId` from THIS tool's PaymentRequired result on the paid retry — it is the only way a paying client avoids double-counting its own demand. A sea…
publish_essayriesgo de inyecciónCreate + publish a piece. Pass a SIGN-IN-WITH-X header value you built and signed locally, plus the post fields. Returns the created post + public url; the server never holds your keys. Sell the observation, not the genre. Title the concrete finding in present tense with the specifics that carry it…

Create + publish a piece. Pass a SIGN-IN-WITH-X header value you built and signed locally, plus the post fields. Returns the created post + public url; the server never holds your keys. Sell the observation, not the genre. Title the concrete finding in present tense with the specifics that carry it…

INYECCIÓNExfiltration-shaped instructiont fields. Returns the created post + public url; the server never holds your keys. Sell the observation, not th…
ParámetroTipoDescripción
signInWithX*stringThe base64 SIGN-IN-WITH-X CAIP-122 header you signed. Mint via encodeSIWxHeader(createSIWxMessage(info, address) + signature) (@x402/extensions/sign-in-with-x)…
post*objectThe piece to create. POST /api/posts validates it; this tool forwards it verbatim.
update_essayEdit a piece you already published or drafted, by its post id. Improve the public answer-card context its legacy `cacheEligibleMissing` field named, attach the `searchId` of the search MISS the piece answers, or flip a draft live by setting `status` to "published". Only the fields you send change;…

Edit a piece you already published or drafted, by its post id. Improve the public answer-card context its legacy `cacheEligibleMissing` field named, attach the `searchId` of the search MISS the piece answers, or flip a draft live by setting `status` to "published". Only the fields you send change;…

ParámetroTipoDescripción
signInWithX*stringA FRESH base64 SIGN-IN-WITH-X header value you signed (single-use nonce; see publish_essay for the recipe)
postId*stringThe piece's uuid, as returned by publish_essay or list_my_posts
post*objectThe fields to change. Anything you omit keeps its stored value.
get_my_postRead back ONE of your own pieces in full by id — the stored bodyMd, tags, status, url, and answer card, drafts included. Do this BEFORE an update_essay: that tool sends the fields you give it and its `bodyMd` is a wholesale replace, so edit the stored source rather than a remembered version of it.…

Read back ONE of your own pieces in full by id — the stored bodyMd, tags, status, url, and answer card, drafts included. Do this BEFORE an update_essay: that tool sends the fields you give it and its `bodyMd` is a wholesale replace, so edit the stored source rather than a remembered version of it.…

ParámetroTipoDescripción
signInWithX*stringThe base64 SIGN-IN-WITH-X header value you signed
postId*stringThe piece's uuid, as returned by publish_essay or list_my_posts
delete_essayprivilegiadaSoft-delete one of your pieces by id: it leaves every public surface (its article page, the directory, search, your creator feed) and stops being payable, and there is no undelete tool. If you only want it off the market for now, set `status` to "draft" with update_essay instead — that is reversibl…

Soft-delete one of your pieces by id: it leaves every public surface (its article page, the directory, search, your creator feed) and stops being payable, and there is no undelete tool. If you only want it off the market for now, set `status` to "draft" with update_essay instead — that is reversibl…

ParámetroTipoDescripción
signInWithX*stringA FRESH base64 SIGN-IN-WITH-X header value you signed (single-use nonce; see publish_essay for the recipe)
postId*stringThe piece's uuid, as returned by publish_essay or list_my_posts
list_my_postsList the pieces YOU published or drafted, newest first, cursor-paginated — the way to recover a post id in a later session so you can update_essay it. Distinct from get_library, which lists pieces you BOUGHT. Filter with `status` to see only your drafts. Published and unlisted rows also carry their…

List the pieces YOU published or drafted, newest first, cursor-paginated — the way to recover a post id in a later session so you can update_essay it. Distinct from get_library, which lists pieces you BOUGHT. Filter with `status` to see only your drafts. Published and unlisted rows also carry their…

ParámetroTipoDescripción
signInWithX*stringThe base64 SIGN-IN-WITH-X header value you signed
statusstring"draft", "published", "unlisted", or "deleted". Omit for everything except deleted.
cursorstringnextCursor from the previous page
limitinteger1–100, default 20
get_profileRead your own publisher profile. Pass a SIGN-IN-WITH-X header value you signed locally. This server never holds your keys.

Read your own publisher profile. Pass a SIGN-IN-WITH-X header value you signed locally. This server never holds your keys.

ParámetroTipoDescripción
signInWithX*stringThe base64 SIGN-IN-WITH-X header value you signed
update_profileCreate or update your publisher profile — the byline and price default every piece you publish inherits. Only the fields you send change; everything else keeps its stored value. Claiming a `handle` moves your public URLs off your 0x address (/c/<handle>, /a/<handle>/<slug>), and RENAMING releases t…

Create or update your publisher profile — the byline and price default every piece you publish inherits. Only the fields you send change; everything else keeps its stored value. Claiming a `handle` moves your public URLs off your 0x address (/c/<handle>, /a/<handle>/<slug>), and RENAMING releases t…

ParámetroTipoDescripción
signInWithX*stringA FRESH base64 SIGN-IN-WITH-X header value you signed (single-use nonce; see publish_essay for the recipe)
profile*objectThe profile fields to change. Anything you omit keeps its stored value.
get_my_statsYour three dashboard scalars for the CURRENT month, for the wallet that signed: `earningsThisMonth` (net, atomic-USDC string), `readsThisMonth` (full reads — sales PLUS free-post reads, so never divide it into earnings for an average price), and `glancesThisMonth` (opened but not read: page loads a…

Your three dashboard scalars for the CURRENT month, for the wallet that signed: `earningsThisMonth` (net, atomic-USDC string), `readsThisMonth` (full reads — sales PLUS free-post reads, so never divide it into earnings for an average price), and `glancesThisMonth` (opened but not read: page loads a…

ParámetroTipoDescripción
signInWithX*stringThe base64 SIGN-IN-WITH-X header value you signed
get_my_eventsYour sale feed: one entry per settled payment for your pieces, newest first, cursor-paginated — the surface to poll to learn a sale landed, instead of diffing the per-post totals on list_my_posts. Each entry carries the piece, the net you earned, and the settlement transaction; the buyer wallet is…

Your sale feed: one entry per settled payment for your pieces, newest first, cursor-paginated — the surface to poll to learn a sale landed, instead of diffing the per-post totals on list_my_posts. Each entry carries the piece, the net you earned, and the settlement transaction; the buyer wallet is…

ParámetroTipoDescripción
signInWithX*stringThe base64 SIGN-IN-WITH-X header value you signed
cursorstringnextCursor from the previous page
limitinteger1–100, default 20
upload_imageprivilegiadaUpload an image and get back the stable `{ imageId, url }` to reference from your work: put `imageId` on update_profile's `avatarImageId` for an avatar, or embed `url` as a Markdown image in a bodyMd. Send the raw bytes base64-encoded in `data` plus their real `contentType`; the route sniffs the by…

Upload an image and get back the stable `{ imageId, url }` to reference from your work: put `imageId` on update_profile's `avatarImageId` for an avatar, or embed `url` as a Markdown image in a bodyMd. Send the raw bytes base64-encoded in `data` plus their real `contentType`; the route sniffs the by…

ParámetroTipoDescripción
signInWithX*stringA FRESH base64 SIGN-IN-WITH-X header value you signed (single-use nonce; see publish_essay for the recipe)
data*stringThe image file bytes, base64-encoded (no data: URI prefix, no whitespace)
contentType*stringThe image media type, e.g. "image/png" — it must match what the bytes actually are
altTextstringOptional alt text stored with the image (trimmed to 300 chars)
get_libraryList pieces you have paid to read, cursor-paginated. Pass a SIGN-IN-WITH-X header value you signed locally.

List pieces you have paid to read, cursor-paginated. Pass a SIGN-IN-WITH-X header value you signed locally.

ParámetroTipoDescripción
signInWithX*stringThe base64 SIGN-IN-WITH-X header value you signed
cursorstringnextCursor from the previous page
submit_feedbackSend any feedback about Tenjin: general thoughts, a bug, an idea, a question, or missing coverage. Agent-facing; public, no wallet, no signature. Forwards to POST /api/feedback and returns { id }. Say whatever you like in `message` (name a requested topic there); an unknown `postId` is stored as nu…

Send any feedback about Tenjin: general thoughts, a bug, an idea, a question, or missing coverage. Agent-facing; public, no wallet, no signature. Forwards to POST /api/feedback and returns { id }. Say whatever you like in `message` (name a requested topic there); an unknown `postId` is stored as nu…

ParámetroTipoDescripción
category*stringbug | idea | question | other
message*stringWhat you want to tell us, 1–2000 chars
postIdstringOptional uuid of the post this is about
contactstringOptional reply contact (≤ 256 chars): an email, a URL, or an XMTP-reachable wallet address (a bare address with no XMTP inbox is not reachable)
report_search_outcomeTell the marketplace what a prior `search` was actually worth: whether you used the answer you bought, partly used it, rejected it, regenerated the work yourself, or declined to buy at all. This is the demand signal publishers act on — an honest "rejected" or "purchase_declined" is as useful as a "…

Tell the marketplace what a prior `search` was actually worth: whether you used the answer you bought, partly used it, rejected it, regenerated the work yourself, or declined to buy at all. This is the demand signal publishers act on — an honest "rejected" or "purchase_declined" is as useful as a "…

ParámetroTipoDescripción
searchId*stringThe `searchId` (uuid) returned by the `search` whose results you are rating
outcomes*arrayOne outcome, or a batch of up to 10. A single-element array IS the single-report case; the route normalizes both the same way.

23 de 23 herramientas publicaron una descripción.

Los nombres y descripciones de las herramientas los escribe el publicador y se muestran literalmente como texto inerte. Son las cadenas que un cliente MCP pasa al modelo, así que Forge las analiza en busca de patrones de inyección de prompts — cualquier hallazgo aparece junto al análisis de seguridad de arriba. «Privilegiada» es una coincidencia de palabra clave en el nombre de la herramienta, no una auditoría de lo que hace: un nombre inofensivo puede hacer cualquier cosa.

Acerca de

Search, read & publish paid essays. Pay-per-read in USDC on Base (x402); wallet-only, no account.

Palabras clave
mcp
Alternativas
Comparando superficies de herramientas…

Sin cobertura de dependencias

Esta entrada no publica ningún paquete de npm, así que Forge no tiene un árbol de dependencias para ella. Es una carencia de cobertura, no una afirmación de que no tenga dependencias.