blog.tenjin/tenjin

MCPcommunityattivo
v0.1.0blog.tenjinUnknownAggiornato 2 mesi fa

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

Stato dell’endpointattivo
verificato 6 giorni fa · 244 ms
100 % degli ultimi 4 controlli hanno raggiunto questo endpoint
Funziona in
ClaudeCursorCopilotChatGPTGemini

Dedotto dai trasporti dichiarati da questo annuncio (streamable-http). Un client che non compare qui non è escluso — semplicemente Forge non è in grado di confermarlo.

Indicizzato automaticamente da fonti pubbliche. Non ancora verificato dal suo sviluppatore su Forge.Rivendica questo annuncio →
2 mesi faUltimo aggiornamento
Pacchetto
Autoreblog.tenjin
LicenzaUnknown
Versione0.1.0
Fontemcp-registry
Stato di fiducia
D
30/100Rischio
Presente nell’indice di Forge+10/10
Identità del publisher verificata+0/30
Publisher: per questo annuncio non risulta alcun repository, quindi `forge publish` non può verificare la proprietà automaticamente. Usa «Rivendica questo annuncio» qui sopra — Forge li esamina a mano.
Verifica del dominio+0/10
Al momento non disponibile per questo tipo di annuncio — oggi il controllo del dominio viene eseguito solo per i pacchetti su npm, quindi questa riga non può ancora essere ottenuta qui, indipendentemente da cosa sia ospitato sul dominio.
Analisi prompt injection · rilievi+0/30
Publisher: rimuovi dal codice le istruzioni rivolte ai client di IA anziché a lettori umani
Analisi offuscamento / esfiltrazione · pulita+20/20
StatoIndicizzato dalla community
PublisherNon verificato
FirmaNon firmato
Dominio
Provenienza
DipendenzeNon verificate
Superficie di strumenti23 strumenti · 2 privilegiati
Analisi di sicurezza⚠ Avvisi (2)vlive · 6 g faQuanto è efficace questa analisi?
PROMPTtool:resolve_keysExfiltration-shaped instruction
PROMPTtool:publish_essayExfiltration-shaped instruction
ValutazioniNessuna
Indicizzato17 lug 2026

La verifica conferma l’identità del publisher (la proprietà del repo), non la sicurezza del codice. L’analisi di sicurezza copre i CVE noti e gli script di installazione sospetti.

Strumenti

23 strumenti · 2 privilegiati · 2 segnalati per injection
Osservato in tempo reale dall’endpoint del fornitore6d ago

Letto da un vero handshake MCP initialize → tools/list verso l’endpoint dichiarato. Nessuno strumento è stato invocato — tools/list è la chiamata di introspezione in sola lettura che il protocollo prevede a questo scopo. Riflette ciò che il server annunciava in quel momento; un endpoint ospitato non è vincolato ad alcuna versione e può cambiare senza preavviso.

  • https://tenjin.blog/api/mcp23 strumenti · 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…

ParametroTipoDescrizione
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…

ParametroTipoDescrizione
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_keysrischio di injectionFREE, 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…

INIEZIONEExfiltration-shaped instruction keyless and anonymous. Wraps POST /api/keys/resolve: hand it keys you already hold about your s…
ParametroTipoDescrizione
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…

ParametroTipoDescrizione
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.

ParametroTipoDescrizione
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.

ParametroTipoDescrizione
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…

ParametroTipoDescrizione
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…

Per questo strumento non è stato pubblicato alcuno schema di input.

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…

ParametroTipoDescrizione
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…

ParametroTipoDescrizione
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_essayrischio di injectionCreate + 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…

INIEZIONEExfiltration-shaped instructiont fields. Returns the created post + public url; the server never holds your keys. Sell the observation, not th…
ParametroTipoDescrizione
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;…

ParametroTipoDescrizione
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.…

ParametroTipoDescrizione
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_essayprivilegiatoSoft-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…

ParametroTipoDescrizione
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…

ParametroTipoDescrizione
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.

ParametroTipoDescrizione
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…

ParametroTipoDescrizione
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…

ParametroTipoDescrizione
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…

ParametroTipoDescrizione
signInWithX*stringThe base64 SIGN-IN-WITH-X header value you signed
cursorstringnextCursor from the previous page
limitinteger1–100, default 20
upload_imageprivilegiatoUpload 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…

ParametroTipoDescrizione
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.

ParametroTipoDescrizione
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…

ParametroTipoDescrizione
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 "…

ParametroTipoDescrizione
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 strumenti su 23 hanno pubblicato una descrizione.

I nomi e le descrizioni degli strumenti sono scritti dal publisher e mostrati alla lettera come testo inerte. Sono le stringhe che un client MCP passa a un modello, quindi Forge vi cerca schemi di prompt injection — ogni rilievo compare insieme all’analisi di sicurezza qui sopra. «Privilegiato» è una corrispondenza di parola chiave sul nome dello strumento, non una verifica di ciò che fa: un nome innocuo può comunque fare qualsiasi cosa.

Descrizione

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

Parole chiave
mcp
Alternative
Confronto delle superfici di strumenti…

Nessuna copertura delle dipendenze

Questa voce non pubblica alcun pacchetto npm, quindi Forge non ha un albero delle dipendenze per essa. È una lacuna di copertura, non l'affermazione che non abbia dipendenze.