Elenca gli agenti non registrati
Leggi i chiamanti visti dal gateway MCP, poi autorizzane uno come identità o tienilo tracciato come ombra.
mcp.shadowidentity.enroll
Leggi i chiamanti visti dal gateway MCP, poi autorizzane uno come identità o tienilo tracciato come ombra.
mcp.shadowidentity.enrollFai passare da Intramedial azioni di agenti, hash di contenuti, controlli API, lookup DNS, webhook, chiamate LLM e commit git. Ricevi una ricevuta firmata che chiunque verifica, senza fidarsi di noi.
Compaiono agenti che nessuno ha iscritto. Ogni chiamata attraverso il gateway MCP lascia un evento shadow con DID e tool. Li leggi, confronti i chiamanti con il registry e decidi cosa sia ciascuno.
Il codice legge la chiave da INTRAMEDIAL_KEY. Tienila nella shell o nel tuo secret store, mai in un file di cui fai commit. Le chiamate che richiedono una persona autenticata non possono usare una chiave: le effettua la console.
Instrada una chiamata attraverso il gateway come un agente che nessuno ha iscritto.
events contiene i 50 più recenti, ciascuno con actorDid, tool e mode.
{
"events": [
{
"at": "2026-11-01T09:14:02.118Z",
"event": {
: ,
: ,
: ,
:
}
}
],
: ,
:
}mcp.shadowmcp-shadowidentity.enrollidentity-enroll
curl -sS -X POST https://api.intramedial.com/api/v1/acp/mcp/enforce \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"actorDid": "did:web:unknown.example:agent:scraper",
"tool": "fs.write"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/mcp/enforce", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
actorDid: "did:web:unknown.example:agent:scraper",
tool: "fs.write",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/mcp/enforce",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"actorDid": "did:web:unknown.example:agent:scraper",
"tool": "fs.write",
},
timeout=30,
)
print(res.status_code, res.json())La route restituisce i 50 eventi più recenti con DID, tool e modalità. Non dice se un chiamante è iscritto; confrontare i DID con l'elenco delle identità per trovare quelli sconosciuti.
curl -sS https://api.intramedial.com/api/v1/acp/mcp/shadow \
-H "Authorization: Bearer $INTRAMEDIAL_KEY"const res = await fetch("https://api.intramedial.com/api/v1/acp/mcp/shadow", {
headers: { Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`, },
});
const body = await res.json();
for (const { at, event } of body.events) console.log(at, event.actorDid, event.tool, event.mode);import os, requests
res = requests.get(
"https://api.intramedial.com/api/v1/acp/mcp/shadow",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
timeout=30,
)
body = res.json()
for e in body["events"]:
print(e["at"], e["event"]["actorDid"], e["event"]["tool"], e["event"]["mode"])Iscrivi il DID come identità con un proprietario e un tipo. Corrisponde poi a un solo agente e il suo profilo di affidabilità parte da 50.
curl -sS -X POST https://api.intramedial.com/api/v1/acp/identity/enroll \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"did": "did:web:unknown.example:agent:scraper",
"displayName": "Docs scraper",
"kind": "partner"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/identity/enroll", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
did: "did:web:unknown.example:agent:scraper",
displayName: "Docs scraper",
kind: "partner",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/identity/enroll",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"did": "did:web:unknown.example:agent:scraper",
"displayName": "Docs scraper",
"kind": "partner",
},
timeout=30,
)
print(res.status_code, res.json())Iscrivi con shadow impostato su true per tracciare un chiamante senza autorizzarlo. Resta visibile nell'elenco, con ogni chiamata effettuata, e anche un chiamante rifiutato resta visibile.
curl -sS -X POST https://api.intramedial.com/api/v1/acp/identity/enroll \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"did": "did:web:unknown.example:agent:scraper",
"displayName": "Docs scraper",
"kind": "partner",
"shadow": true
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/identity/enroll", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
did: "did:web:unknown.example:agent:scraper",
displayName: "Docs scraper",
kind: "partner",
shadow: true,
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/identity/enroll",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"did": "did:web:unknown.example:agent:scraper",
"displayName": "Docs scraper",
"kind": "partner",
"shadow": True,
},
timeout=30,
)
print(res.status_code, res.json())Copiato da: /docs/mcp-shadow
Il registro è append-only e sigillato sotto radici Merkle. L'ora di una voce è l'orologio di Intramedial e un bundle firmato puoi verificarlo offline con la chiave pubblicata.
Chiedi al gateway MCP il verdetto di Intralock sulla chiamata a tool di un agente, leggi la motivazione ed elenca i chiamanti visti.
mcp.enforceRegistra un agente con un DID proprio, un nome e un tipo, così che ogni azione corrisponda a un solo agente.
identity.enrollLeggi ogni agente, lease, in attesa e quarantena che il piano detiene, in una chiamata, senza inventario da tenere a mano.
coordination.fleetmapUna breve email quando aggiungiamo ricette. Nessun’altra posta, e ti disiscrivi da ogni messaggio.
Senza account: 35 chiamate in 7 giorni sulle route attest, con ricevute marcate come test. Iscriviti quando vuoi andare avanti.