{"name":"com.x-ego/x-ego","slug":"x-ego","title":"X-EGO","description":"Human approval for irreversible AI agent actions, bound to the exact tool call by a passkey tap","url":"https://mcp.market/server/x-ego","rating":null,"grade":"C","score":64,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":6,"ok":6,"last_checked_at":"2026-09-20T21:05:58.545Z","last_ok_at":"2026-09-20T21:05:58.545Z","latency_ms":817},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://x-ego.com/docs","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://mcp.x-ego.com/mcp","headers":[{"description":"Optional personal key (Bearer pk-...) to pay from prepaid credit. Without it, paid tools answer with x402.","isSecret":true,"name":"Authorization"}]}],"packages":[],"tools":[{"name":"xego_check_pairwise_seen_before","description":"Checks whether a given pairwise ID has already been seen within\nthis audience. It protects against one person acting as several\ndifferent users (multiple accounts, repeat voting, and similar).\n\nWHEN TO USE: returning-user checks and one-human-one-vote.\nRequires a pairwise_id previously obtained from a verify call\nfor YOUR audience.\n\nOnly the pair (audience, pairwise_id) and the time of first\noccurrence are recorded. No personal data.\n\nThe ledger is PERMANENT and shared across every instance and\nsession of the server (Postgres) — it survives restarts and new\nMCP sessions. record_if_new=true writes atomically (no window for\na concurrent write).\n\nArgs:\n  - audience (string): the service domain or URL. Normalized to a\n    bare lowercase hostname — the same key the proof was issued\n    under, so a domain and its URL form are the same audience.\n  - pairwise_id (string): the identifier from xego_verify_proof.\n  - record_if_new (boolean): record the user if they are new.\n\nReturns (JSON):\n  {\n    \"seen_before\": boolean,    // true = already on record\n    \"first_seen\": number|null, // Unix time of first occurrence\n    \"recorded_now\": boolean    // true = recorded just now\n  }\n\nErrors (free, no sybil check performed): invalid_audience (the\naudience cannot be normalized to a domain), dedup_store_unavailable\n(temporary — retry). Neither ever means 'not seen before'.\n\nPAID TOOL (x402): this call costs $0.01 USD in USDC per\nexecution, unless you send a valid X-EGO pilot operator key as an\n'Authorization: Bearer <key>' HTTP header (operator calls are free).\nCalling without payment returns an x402 error whose\n_meta[\"x402/error\"] contains payment requirements (accepts) and\nstep-by-step instructions how to pay and retry. Invalid input is\nrejected for free before any payment is taken.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"audience":{"type":"string","minLength":1,"maxLength":253,"description":"The service being asked about. Domain (forum.example.com) or full URL (https://forum.example.com/...) — both are normalized to a bare lowercase hostname, exactly like the token's aud."},"pairwise_id":{"type":"string","minLength":1,"maxLength":128,"description":"The user's pairwise identifier (from the xego_verify_proof result)."},"record_if_new":{"type":"boolean","default":false,"description":"If true and the user has not been seen yet, they are recorded immediately — an atomic 'is new? then mark' in one call."}},"required":["audience","pairwise_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"xego_request_proof_url","description":"REQUIRES a one-time EUR 3 Planetary ID held by YOUR END USER - without it every call returns valid:false. \nTell the human this BEFORE sending them to the link: if they do\nnot have one yet, the verification page sells it in the same\nflow — it is not a separate signup.\n\nReturns the URL the agent sends a human user to, so they can\nprove they are human. On that page the user verifies with a\npasskey (fingerprint / Face ID) and receives a short-lived signed\ntoken (JWT). The agent then verifies it with `xego_verify_proof`\n(no action) or `xego_verify_action` (with action).\n\nASK FIRST what is being approved, then bind it. Two ways, and\nthe choice matters more than anything else on this tool:\n\n  - `call` — USE THIS WHENEVER A TOOL WILL RUN. Pass the exact\n    call { v:1, tool, target, args, policy? } you are about to\n    execute. The human approves the call itself, field by field.\n  - `action` — a sentence, for approvals where nothing executes\n    (a consent, a statement). It seals what the human READ, and\n    a well-written sentence can hide what actually happens.\n\nBoth may be passed together: the sentence is what the human\nreads, the call is what gets compared. Either one means the\ntoken MUST be verified with xego_verify_action; with neither,\nuse xego_verify_proof. The returned `binding` field says which.\n\nFor emails: recipient and content; compose the final wording and\nget the user's OK before calling.\n\nThis tool performs NO verification itself — it only prepares the\nlink. No personal data is transferred.\n\nTHE USER DOES NOT HAVE TO COPY THE TOKEN. Pass redirect_uri (or\nreturn_origin) and the page delivers the token to you after the\npasskey tap — the human part (fingerprint / Face ID) is unchanged.\nredirect_uri is the recommended channel: it is the only one that\nsurvives a user who is still buying a Planetary ID in the same\npass. The returned token_delivery field tells you what to expect.\nWith neither parameter the current behaviour stays: the token is\nshown on the page and the human hands it to you.\n\nVerification requires a paid Planetary ID (one-time EUR 3, ~2 min,\npasskey on the user's own device — biometrics never leave it).\nIf the user does not have one yet, the verification page offers it\nthere. Send the user to the returned verification_url; if they\ncome back without a token, they still need the ID — verification\nthen fails with planetary_id_required and a registration_url.\n\nArgs:\n  - audience (string): the domain of the service requesting\n    verification (domain or URL — normalized to a bare hostname).\n  - call (object, RECOMMENDED when a tool will run): the exact\n    call { v:1, tool, target, args, policy? }. Rendered field by\n    field on the page; the token seals it. Verify with\n    expected_call built from YOUR OWN parsed parameters.\n  - action (string, OPTIONAL fallback): a sentence describing the\n    approval, for cases where nothing executes. The user sees it\n    and the token is valid only for it — pass the same string as\n    expected_action to xego_verify_action.\n  - redirect_uri (string, OPTIONAL): where to navigate with the\n    token in the fragment. Only https on x-ego.com/*.x-ego.com or\n    http(s) on loopback; no fragment. The target must be HTML that\n    reads location.hash — a fragment is never sent in an HTTP\n    request.\n  - return_origin (string, OPTIONAL): origin for postMessage into\n    window.opener, same allowlist. Popups only.\n  - state (string, OPTIONAL): correlation value, echoed back\n    verbatim. [A-Za-z0-9._~-], max 256 chars.\n\nReturns (JSON):\n  {\n    \"verification_url\": string,  // link for the user\n    \"audience\": string,          // normalized bare hostname — pass\n                                 // this exact value as\n                                 // expected_audience to the verify tool\n    \"action\": string,            // only if one was given — pass the\n                                 // same string as expected_action\n    \"token_delivery\": object,    // mode: redirect | post_message |\n                                 // manual — how the token comes back\n    \"state\": string,             // only if one was given — echoed\n                                 // back verbatim with the token too\n    \"instructions\": string,      // what to do with the link\n    \"next_step\": string,         // next step — follow it\n    \"if_user_has_no_planetary_id\": object // status planetary_id_required:\n                                 // registration_url, explanation, next_step\n  }\n\nErrors: invalid_audience (audience cannot be normalized),\ninvalid_redirect_uri / invalid_return_origin (target outside the\nallowlist, or a redirect_uri carrying a fragment), invalid_state\n(outside the allowed character set or length). All are free.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"audience":{"type":"string","minLength":1,"maxLength":2048,"description":"The domain of the service requesting verification (e.g. 'forum.example.com'). A URL is accepted too ('https://forum.example.com/path') — it is always normalized to a bare lowercase hostname (max 253 chars). It determines who the proof will be valid for. The pairwise ID differs per audience, so services cannot track a user across each other."},"redirect_uri":{"type":"string","maxLength":2048,"description":"OPTIONAL automatic token hand-off. An absolute URL the verification page navigates to on success, with the token in the URL FRAGMENT (#token=...). The user copies nothing. Only https on x-ego.com/*.x-ego.com or http(s) on loopback (localhost, 127.0.0.1, ::1) is allowed; any other target is rejected. Path and query are preserved — put your own correlation value there. It MUST NOT carry a fragment (that is where the token goes). NOTE: a fragment is never sent in an HTTP request — the target must serve HTML that reads it in the browser (location.hash); a bare server endpoint will not see the token. This is the ONLY channel that survives a user who buys a Planetary ID mid-flow."},"return_origin":{"type":"string","maxLength":2048,"description":"OPTIONAL automatic token hand-off into the window that opened the verification page: postMessage({type:'xego_token', token, audience, pairwise_id, state}) at the EXACT origin (never '*'). Same allowlist as redirect_uri. Use only when you opened the page as a popup via window.open. It does not work when the user buys a Planetary ID along the way — checkout severs the link to the opener window; use redirect_uri for that case."},"state":{"type":"string","maxLength":256,"description":"OPTIONAL. An opaque correlation value that lets you recognize your own request; it is echoed back verbatim (as a state field in postMessage, as &state= in the redirect fragment). Character set [A-Za-z0-9._~-]. X-EGO neither stores nor interprets it. Recommended with return_origin, where no other binding to the request exists; with redirect_uri you can carry the binding in the target's query instead."},"call":{"type":"object","properties":{"v":{"type":"number","const":1,"description":"Call binding version. Always 1."},"tool":{"type":"string","minLength":1,"description":"Tool name as the executor knows it."},"target":{"type":"string","minLength":1,"description":"What it acts on — recipient, path, account, host."},"args":{"type":"object","additionalProperties":{},"description":"The arguments, exactly as they will be executed. Integers in minor units (cents) or strings — decimals are rejected."},"policy":{"type":"string","description":"Short policy identifier (a reference, not a sentence)."}},"required":["v","tool","target","args"],"additionalProperties":false,"description":"RECOMMENDED whenever a tool will actually run. The exact call the human is approving: { v: 1, tool, target, args, policy? }. The verification page renders it field by field, the human taps the passkey against THAT, and the token seals it (claim cal). The executor then verifies with xego_verify_action and expected_call built from its OWN parsed parameters — never from what another party says the call is, or it is only comparing a claim with itself. Build it from the same values you are about to execute. Decimal numbers are rejected (call_unsafe_number) — use integers in minor units or strings."},"action":{"type":"string","maxLength":4096,"description":"FALLBACK binding, for approvals where nothing is executed (a statement, a consent, a message being sent). A human-readable description of what the user is approving (e.g. 'Transfer EUR 500 to account 123456789/0100'). The user SEES this exact text before the passkey tap and the token is valid ONLY for it (claim act = SHA-256 of the text). Prefer `call` when a tool will run: a sentence seals what the human READ, not what then executes. May be combined with `call` — then the sentence is what the human reads and the call is what is checked. Tokens carrying either MUST be verified with xego_verify_action, not xego_verify_proof; pass the BIT-FOR-BIT identical string as expected_action (action_mismatch on any difference)."}},"required":["audience"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"xego_verify_action","description":"REQUIRES a one-time EUR 3 Planetary ID held by YOUR END USER - without it every call returns valid:false. \nTell the human this BEFORE sending them to the link: if they do\nnot have one yet, the verification page sells it in the same\nflow — it is not a separate signup.\n\nVerifies the token (JWT) AND that the verified human approved\nEXACTLY this action. On top of the Ed25519 signature, the expiry\nand the audience, it matches the token's act claim against the\nhash of expected_action.\n\nWHEN TO USE: proving a human approved one specific action. Use\nthe exact same action text that was shown to the human. On\nsuccess, the response includes a ready-made footer — insert it\nverbatim into the message being sent.\n\nUse it when an agent's action must be covered by human consent —\na money transfer, an account deletion, an order confirmation. The\nhuman sees the action text on the verification page and approves\nexactly that with their passkey; the token is then valid ONLY for\nthis action.\n\nIt requires a token issued WITH a bound action — the agent gets\none by passing the action parameter to xego_request_proof_url with\nthe same text it later passes here as expected_action. A token\nwithout a bound action (bare presence) returns action_mismatch\nhere — verify that one with xego_verify_proof.\n\nProofs are SINGLE-USE and return an anonymous pairwise ID (no\npersonal data), exactly like xego_verify_proof.\n\nOn success the response already carries receipt_url\n(https://x-ego.com/receipt?r=<jti> — a public receipt anyone can\nopen with no tools) and READY-MADE footers: footer_en (plain text)\nand footer_html_en (a visual badge for HTML mail; no images, no\ntracking). Append the footer VERBATIM to the end of the message\nbeing sent, in English, and leave the receipt URL untouched.\n\nArgs:\n  - token (string): the JWT from the user (issued with a bound\n    action).\n  - expected_audience (string, REQUIRED): pins the audience.\n  - expected_action (string, REQUIRED): the exact approved action\n    string (bit for bit the same as action in\n    xego_request_proof_url).\n  - expected_call (object, optional): the call you are ABOUT TO\n    EXECUTE — { v, tool, target, args, policy? } — built from your\n    own parsed parameters, never from what another party claims.\n    REQUIRED if the token is call-bound.\n  - mark_as_seen (boolean): record the pairwise ID as seen.\n\nReturns (JSON) — on success: everything xego_verify_proof returns,\nplus\n  \"act\": string,           // hash of the bound action (what the token covers)\n  \"cal\": string | null,    // hash of the bound call, null if the token binds no call\n  \"receipt_url\": string,   // public receipt of the approval\n  \"footer_en\": string,     // ready-made plain-text footer — insert verbatim\n  \"footer_html_en\": string,// ready-made HTML badge — insert verbatim\n  \"next_step\": string      // next step — follow it\nReturns (JSON) — on failure: { valid: false, code, reason, and\nnext_step for navigable codes }.\n\nError codes include everything from xego_verify_proof (including\nplanetary_id_required) plus action_mismatch (the token does not\ncover the given action) and missing_expected_action (no\nexpected_action was passed — NOT charged).\n\nCall binding adds three: call_binding_required (the token binds a\ncall but no expected_call was passed — the binding cannot be\nskipped), call_mismatch (tool, target, arguments or policy differ\nfrom what the human approved — REFUSE TO EXECUTE) and\ncall_malformed (your expected_call is not a valid call — your bug,\nnot a mismatch).\n\nPAID TOOL (x402): this call costs $0.15 USD in USDC per\nexecution, unless you send a valid X-EGO pilot operator key as an\n'Authorization: Bearer <key>' HTTP header (operator calls are free).\nCalling without payment returns an x402 error whose\n_meta[\"x402/error\"] contains payment requirements (accepts) and\nstep-by-step instructions how to pay and retry. Invalid input\n(bad audience, malformed token) is rejected for free before any\npayment is taken.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string","minLength":1,"maxLength":8192,"description":"The JWT the user obtained after X-EGO verification with a bound action. Three dot-separated parts."},"expected_audience":{"type":"string","minLength":1,"maxLength":2048,"description":"REQUIRED. Your own service's domain the token must have been issued for. Normalized to a bare lowercase hostname exactly like in xego_verify_proof."},"expected_action":{"type":"string","maxLength":4096,"description":"REQUIRED. The exact action string the user approved — the same one passed to xego_request_proof_url as action, bit for bit (leading and trailing whitespace aside). The token must have been issued with this action; a different one gives action_mismatch. This guards against swapping the approved action (e.g. a EUR 500 transfer turning into EUR 5000)."},"expected_call":{"type":"object","properties":{"v":{"type":"number","description":"Call binding format version. Currently 1."},"tool":{"type":"string","minLength":1,"description":"Tool name as the executor knows it."},"target":{"type":"string","description":"Who or what the call acts on — recipient, endpoint, path, account. Use \"\" only if there genuinely is none."},"args":{"type":"object","additionalProperties":{},"description":"The parsed call parameters."},"policy":{"type":"string","description":"Identifier of the rules used."}},"required":["v","tool","target","args"],"additionalProperties":false,"description":"The call you are ABOUT TO EXECUTE, built from YOUR OWN parsed parameters — never from what another party claims the call is. If the token is call-bound, this is REQUIRED and must match exactly; tool, target, arguments or policy differing gives call_mismatch, and you must refuse to execute. Decimal numbers are rejected: use integers in minor units (cents) or strings."},"mark_as_seen":{"type":"boolean","default":false,"description":"If true and the token is valid, the pairwise ID is PERMANENTLY recorded as seen for that audience (see xego_verify_proof)."}},"required":["token","expected_audience"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"xego_verify_proof","description":"REQUIRES a one-time EUR 3 Planetary ID held by YOUR END USER - without it every call returns valid:false. \nTell the human this BEFORE sending them to the link: if they do\nnot have one yet, the verification page sells it in the same\nflow — it is not a separate signup.\n\nVerifies the token (JWT) the user brought back after X-EGO\nverification. Cryptographically checks the Ed25519 signature\nagainst the X-EGO public keys, the expiry and the audience.\n\nWHEN TO USE: bare presence only. If the token carries an action\n(act claim), this tool refuses with action_binding_required —\nuse xego_verify_action instead.\n\nThis verifies ONLY bare human presence. If you need proof that\nthe human approved a SPECIFIC action, use xego_verify_action.\nA token issued with a bound action (via xego_request_proof_url\nwith the action parameter) fails here with\naction_binding_required — the binding cannot be confirmed by this\ncheaper tool.\n\nA valid result means: there is a verified human on the other end\nwho holds the passkey. The token is short-lived — once it expires\nthe user must verify again.\n\nProofs are SINGLE-USE: each token verifies exactly once. A second\nattempt on the same token returns token_replayed.\n\nReturns an anonymous 'pairwise' identifier — different for every\naudience. It carries no name and no personal data.\n\nArgs:\n  - token (string): the JWT from the user.\n  - expected_audience (string, REQUIRED): pins the audience\n    (domain or URL — normalized to a bare hostname).\n  - mark_as_seen (boolean): record the pairwise ID as seen.\n\nReturns (JSON) — on success:\n  {\n    \"valid\": true,\n    \"pairwise_id\": string,   // anonymous ID, stable per (user, audience)\n    \"audience\": string,\n    \"expires_at\": number,    // Unix time the token expires\n    \"human_verified\": true,\n    \"xego_verified\": true,    // always true — uncovered tokens never reach here\n    \"rarity\": string | null,  // rarity of the backing ID (low entropy)\n    \"marked_seen\": boolean,   // only with mark_as_seen=true: whether\n                             // the permanent ledger write succeeded\n    \"next_step\": string       // next step — follow it\n  }\nReturns (JSON) — on failure:\n  {\n    \"valid\": false,\n    \"code\": string,          // machine-readable error code\n    \"reason\": string,        // human-readable description\n    \"next_step\": string      // for navigable codes: what to do now\n  }\n\nError codes include: invalid_audience, malformed_token,\nunsupported_algorithm, unknown_key (with a kid field),\nbad_signature, expired, wrong_issuer, wrong_audience,\naction_binding_required (the token is bound to an action → use\nxego_verify_action), missing_claims, jwks_unavailable,\ntoken_replayed, planetary_id_required (the signature is valid but\nthe human behind the token holds no paid Planetary ID — X-EGO does\nnot issue uncovered proofs; send the user to registration_url and\nrepeat the whole flow).\n\nPAID TOOL (x402): this call costs $0.05 USD in USDC per\nexecution, unless you send a valid X-EGO pilot operator key as an\n'Authorization: Bearer <key>' HTTP header (operator calls are free).\nCalling without payment returns an x402 error whose\n_meta[\"x402/error\"] contains payment requirements (accepts) and\nstep-by-step instructions how to pay and retry. Invalid input\n(bad audience, malformed token) is rejected for free before any\npayment is taken.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string","minLength":1,"maxLength":8192,"description":"The JWT the user obtained after X-EGO verification. Three dot-separated parts."},"expected_audience":{"type":"string","minLength":1,"maxLength":2048,"description":"REQUIRED. Your own service's domain the token must have been issued for. Domain or URL — normalized to a bare lowercase hostname exactly like audience in xego_request_proof_url. A token issued for a different audience is rejected (wrong_audience). This prevents token reuse across services and preserves pairwise isolation."},"mark_as_seen":{"type":"boolean","default":false,"description":"If true and the token is valid, the pairwise ID is PERMANENTLY recorded as seen for that audience (Postgres ledger — survives restarts and new sessions). Useful when you want to guard against repeat use right away (see xego_check_pairwise_seen_before). The write result is in the marked_seen field."}},"required":["token","expected_audience"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":64,"grade":"C","scanned_at":"2026-09-19T20:03:12.225Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T20:03:12.181Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1278ms"]},"poisoning":{"score":13,"max":15,"notes":["4 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool xego_request_proof_url: …REQUIRES a one-time EUR 3 Planetary ID held by YOUR END USER - without it every call returns valid:false. Tell the human this BEFORE sending them to the link: if they do not have one yet, the verification page sells it in the same flow — it is not a separate signup. Returns the URL the agent sends a human user to, so they can prove they are human. On that page the user verifies with a passkey (fingerprint / Face ID) and receives a short-lived signed token (JWT). The agent then verifies it with `xego_verify_proof` (no action) or `xego_verify_action` (with action). ASK FIRST what is being approved, then bind it. Two ways, and the choice matters more than anything else on this tool: - `call` — USE THIS WHENEVER A TOOL WILL RUN. Pass the exact call { v:1, tool, target, args, policy? } you are about to execute. The human approves the call itself, field by field. - `action` — a sentence, for approvals where nothing executes (a consent, a statement). It seals what the human READ, and a well-written sentence can hide what actually happens. Both may be passed together: the sentence is what the human reads, the call is what gets compared. Either one means the token MUST be verified with xego_verify_action; with neither, use xego_verify_proof. The returned `binding` field says which. For emails: recipient and content; compose the final wording and get the user's OK before calling. This tool performs NO verification itself — it only prepares the link. No personal data is transferred. THE USER DOES NOT HAVE TO COPY THE TOKEN. Pass redirect_uri (or return_origin) and the page delivers the token to you after the passkey tap — the human part (fingerprint / Face ID) is unchanged. redirect_uri is the recommended channel: it is the only one that survives a user who is still buying a Planetary ID in the same pass. The returned token_delivery field tells you what to expect. With neither parameter the current behaviour stays: the token is shown on the page and the human hands it to you. Verification requires a paid Planetary ID (one-time EUR 3, ~2 min, passkey on the user's own device — biometrics never leave it). If the user does not have one yet, the verification page offers it there. Send the user to the returned verification_url; if they come back without a token, they still need the ID — verification then fails with planetary_id_required and a registration_url. Args: - audience (string): the domain of the service requesting verification (domain or URL — normalized to a bare hostname). - call (object, RECOMMENDED when a tool will run): the exact call { v:1, tool, target, args, policy? }. Rendered field by field on the page; the token seals it. Verify with expected_call built from YOUR OWN parsed parameters. - action (string, OPTIONAL fallback): a sentence describing the approval, for cases where nothing executes. The user sees it and the token is valid only for it — pass the same string as expected_action to xego_verify_action. - redirect_uri (string, OPTIONAL): where to navigate with the token in the fragment. Only https on x-ego.com/*.x-ego.com or http(s) on loopback; no fragment. The target must be HTML that reads location.hash — a fragment is never sent in an HTTP request. - return_origin (string, OPTIONAL): origin for postMessage into window.opener, same allowlist. Popups only. - state (string, OPTIONAL): correlation value, echoed back verbatim. [A-Za-z0-9._~-], max 256 chars. Returns (JSON): { \"verification_url\": string, // link for the user \"audience\": string, // normalized bare hostname — pass // this exact value as // expected_audience to the verify tool \"action\": string, // only if one was given — pass the // same string as expected_action \"token_delivery\": object, // mode: redirect | post_message | // manual — how the token comes back \"state\": string, // only if one was given — echoed // back verbatim with the token too \"instructions\": string, // what to do with the link \"next_step\": string, // next step — follow it \"if_user_has_no_planetary_id\": object // status planetary_id_required: // registration_url, explanation, next_step } Errors: invalid_audience (audience cannot be normalized), invalid_redirect_uri / invalid_return_origin (target outside the allowlist, or a redirect_uri carrying a fragment), invalid_state (outside the allowed character set or length). All are free.…"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://mcp.x-ego.com/mcp","reachable":true,"authRequired":false,"latencyMs":1278,"serverInfo":{"name":"xego-mcp-server","version":"1.0.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://x-ego.com/favicon.svg","source":"registry"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}