[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-whop-whop-mcp-safety":3,"mdc-o72281-key":34,"related-org-whop-whop-mcp-safety":580,"related-repo-whop-whop-mcp-safety":635},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":24,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"whop-mcp-safety","enforce safety protocols for Whop MCP","The required protocol for any Whop MCP tool call that changes state: the prepare-and-confirm handshake with mcp_confirmation_token, the intent and intent_id attribution fields every operation tool demands, and idempotency_key rules for money movement. Read before the first create, update, delete, refund, payout, transfer, deposit, or formation call in a session, and whenever a Whop tool returns a confirmation token or rejects a call for a missing field.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"whop","Whop","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fwhop.png","whopio",[13,17,20,23],{"name":14,"slug":15,"type":16},"Security","security","tag",{"name":18,"slug":19,"type":16},"Compliance","compliance",{"name":21,"slug":22,"type":16},"MCP","mcp",{"name":9,"slug":8,"type":16},0,"https:\u002F\u002Fgithub.com\u002Fwhopio\u002Fplugins","2026-08-28T15:10:17.294567",null,[],{"repoUrl":25,"stars":24,"forks":24,"topics":30,"description":31},[],"Use Whop in any AI agent.","https:\u002F\u002Fgithub.com\u002Fwhopio\u002Fplugins\u002Ftree\u002FHEAD\u002Fshared\u002Fskills\u002Fwhop-mcp-safety","---\nname: whop-mcp-safety\ndescription: \"The required protocol for any Whop MCP tool call that changes state: the prepare-and-confirm handshake with mcp_confirmation_token, the intent and intent_id attribution fields every operation tool demands, and idempotency_key rules for money movement. Read before the first create, update, delete, refund, payout, transfer, deposit, or formation call in a session, and whenever a Whop tool returns a confirmation token or rejects a call for a missing field.\"\n---\n\n# Whop MCP: writing safely\n\nRead requests are ordinary tool calls. **Writes are not.** Whop's MCP surface layers\nthree requirements on top of the tool schema, and a call that omits any of them\nfails or, worse, silently does the wrong thing twice.\n\n## 1. Attribution — on every operation tool\n\nEvery API-backed operation tool requires two fields that are not part of the\nunderlying Whop API:\n\n| Field | What goes in it |\n| --- | --- |\n| `intent` | The user's original request, **copied verbatim** when you have it. Not your paraphrase, not a summary of the tool call. |\n| `intent_id` | A UUID you generate **once per user message** and reuse for every operation tool call made to fulfill that message. |\n\nGenerate one `intent_id` when you start acting on a message and thread it through\nevery call in that turn. A new user message gets a new UUID. This is what\ndistinguishes two separate turns that happen to contain the same request text.\n\nBoth fields are stripped before validation and never reach the Whop API as\narguments — they exist so Whop can analyze request intent. They are client-supplied:\nthe MCP protocol does not expose the conversation to the server, so nothing verifies\nthem but you. Fill them honestly.\n\nThe fixed-schema `search` and `fetch` compatibility tools and the local\n`connection_status` diagnostic do not take these fields.\n\n## 2. Prepare and confirm — on consequential operations\n\nFinancial, credential, and destructive operations execute in **two calls**:\n\n1. **Prepare.** Call the tool normally. It does *not* execute. It returns a preview\n   of what would happen plus an `mcp_confirmation_token`.\n2. **Confirm.** Show the preview to the user. After they approve, call the **same\n   tool with the same arguments**, adding the confirmation token and a stable\n   `idempotency_key`.\n\n**Never call step 2 without the user's approval of the actual preview.** Do not treat\na general \"yes, do it\" from earlier in the conversation as approval for a preview the\nuser has not seen. The preview is the thing being approved.\n\n### Idempotency\n\n- Money-movement operations **require** an `idempotency_key`. Generate one stable key\n  per logical operation.\n- **Retrying a call reuses the same key.** A new key on a retry is a second payment,\n  not a retry.\n- If an outcome comes back unknown or the call times out, **do not fire again\n  blindly** — verify with the matching `get`\u002F`list` first, then retry with the\n  original key.\n\n### What counts as consequential\n\nPrepare-and-confirm is set per operation on the server, so treat the token in the\nresponse as the source of truth rather than this list. In practice it covers:\n\n- **Money movement** — creating, refunding, retrying, or voiding payments; payouts\n  and payout cancels; transfers; swaps; deposits; topups; marking invoices paid,\n  uncollectible, or void; ad-campaign payment retries; bounties and bounty cancels.\n- **Financial configuration** — issuing or updating cards; fee markups; payout\n  methods; extending or adding free days to a membership; `media generate`; payment\n  method domains; setup intents and return URLs.\n- **Credentials** — creating access tokens and API keys.\n- **Shipping code** — `apps_deploy` builds the app's current source and, unless you\n  pass `draft: true`, promotes it to production. `app_builds_promote` has the same\n  end effect. Both change what real users see; both require confirmation.\n- **Destructive deletes** — anything classified destructive, e.g. deleting a fee markup.\n\nIf a tool returns an `mcp_confirmation_token`, the operation did not happen yet.\nSay so plainly rather than reporting success.\n\n## 3. Scope — what the grant actually allows\n\nThe hosted endpoint requests the MCP **`admin`** scope. `connection_status`\nreports it as `permission_profile: \"admin\"` with `granted_scopes: [\"*\"]` — match on\nthe profile, not on the literal string `admin` in the scope list.\n\nThat is the full administrative profile for the reviewed MCP surface — not read-only,\nnot per-tool, and **not bound to a single business**. It can act on every business the\nauthenticated Whop user manages.\n\nTwo consequences worth stating to the user when it matters:\n\n- Confirm the **account id** before a write. \"The selected business\" may not be the\n  one they meant, and the grant will not stop you.\n- Prepare-and-confirm reduces accidental and duplicate actions. It is **not** a\n  security boundary — it does not shrink the privileges of the OAuth grant.\n\nTell the user to disconnect the integration when they no longer need it.\n\n## Reporting outcomes\n\n- Confirmation token returned, not yet confirmed → \"prepared, awaiting your approval.\"\n- Confirmed and succeeded → say what moved, and include the resulting id.\n- Unknown or timed out → say it is unknown, verify with a read, and never assume.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,62,69,74,151,163,168,197,203,215,270,280,287,348,354,359,444,456,462,508,520,525,551,556,562],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"whop-mcp-writing-safely",[45],{"type":46,"value":47},"text","Whop MCP: writing safely",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52,54,60],{"type":46,"value":53},"Read requests are ordinary tool calls. ",{"type":40,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":46,"value":59},"Writes are not.",{"type":46,"value":61}," Whop's MCP surface layers\nthree requirements on top of the tool schema, and a call that omits any of them\nfails or, worse, silently does the wrong thing twice.",{"type":40,"tag":63,"props":64,"children":66},"h2",{"id":65},"_1-attribution-on-every-operation-tool",[67],{"type":46,"value":68},"1. Attribution — on every operation tool",{"type":40,"tag":49,"props":70,"children":71},{},[72],{"type":46,"value":73},"Every API-backed operation tool requires two fields that are not part of the\nunderlying Whop API:",{"type":40,"tag":75,"props":76,"children":77},"table",{},[78,97],{"type":40,"tag":79,"props":80,"children":81},"thead",{},[82],{"type":40,"tag":83,"props":84,"children":85},"tr",{},[86,92],{"type":40,"tag":87,"props":88,"children":89},"th",{},[90],{"type":46,"value":91},"Field",{"type":40,"tag":87,"props":93,"children":94},{},[95],{"type":46,"value":96},"What goes in it",{"type":40,"tag":98,"props":99,"children":100},"tbody",{},[101,127],{"type":40,"tag":83,"props":102,"children":103},{},[104,115],{"type":40,"tag":105,"props":106,"children":107},"td",{},[108],{"type":40,"tag":109,"props":110,"children":112},"code",{"className":111},[],[113],{"type":46,"value":114},"intent",{"type":40,"tag":105,"props":116,"children":117},{},[118,120,125],{"type":46,"value":119},"The user's original request, ",{"type":40,"tag":55,"props":121,"children":122},{},[123],{"type":46,"value":124},"copied verbatim",{"type":46,"value":126}," when you have it. Not your paraphrase, not a summary of the tool call.",{"type":40,"tag":83,"props":128,"children":129},{},[130,139],{"type":40,"tag":105,"props":131,"children":132},{},[133],{"type":40,"tag":109,"props":134,"children":136},{"className":135},[],[137],{"type":46,"value":138},"intent_id",{"type":40,"tag":105,"props":140,"children":141},{},[142,144,149],{"type":46,"value":143},"A UUID you generate ",{"type":40,"tag":55,"props":145,"children":146},{},[147],{"type":46,"value":148},"once per user message",{"type":46,"value":150}," and reuse for every operation tool call made to fulfill that message.",{"type":40,"tag":49,"props":152,"children":153},{},[154,156,161],{"type":46,"value":155},"Generate one ",{"type":40,"tag":109,"props":157,"children":159},{"className":158},[],[160],{"type":46,"value":138},{"type":46,"value":162}," when you start acting on a message and thread it through\nevery call in that turn. A new user message gets a new UUID. This is what\ndistinguishes two separate turns that happen to contain the same request text.",{"type":40,"tag":49,"props":164,"children":165},{},[166],{"type":46,"value":167},"Both fields are stripped before validation and never reach the Whop API as\narguments — they exist so Whop can analyze request intent. They are client-supplied:\nthe MCP protocol does not expose the conversation to the server, so nothing verifies\nthem but you. Fill them honestly.",{"type":40,"tag":49,"props":169,"children":170},{},[171,173,179,181,187,189,195],{"type":46,"value":172},"The fixed-schema ",{"type":40,"tag":109,"props":174,"children":176},{"className":175},[],[177],{"type":46,"value":178},"search",{"type":46,"value":180}," and ",{"type":40,"tag":109,"props":182,"children":184},{"className":183},[],[185],{"type":46,"value":186},"fetch",{"type":46,"value":188}," compatibility tools and the local\n",{"type":40,"tag":109,"props":190,"children":192},{"className":191},[],[193],{"type":46,"value":194},"connection_status",{"type":46,"value":196}," diagnostic do not take these fields.",{"type":40,"tag":63,"props":198,"children":200},{"id":199},"_2-prepare-and-confirm-on-consequential-operations",[201],{"type":46,"value":202},"2. Prepare and confirm — on consequential operations",{"type":40,"tag":49,"props":204,"children":205},{},[206,208,213],{"type":46,"value":207},"Financial, credential, and destructive operations execute in ",{"type":40,"tag":55,"props":209,"children":210},{},[211],{"type":46,"value":212},"two calls",{"type":46,"value":214},":",{"type":40,"tag":216,"props":217,"children":218},"ol",{},[219,246],{"type":40,"tag":220,"props":221,"children":222},"li",{},[223,228,230,236,238,244],{"type":40,"tag":55,"props":224,"children":225},{},[226],{"type":46,"value":227},"Prepare.",{"type":46,"value":229}," Call the tool normally. It does ",{"type":40,"tag":231,"props":232,"children":233},"em",{},[234],{"type":46,"value":235},"not",{"type":46,"value":237}," execute. It returns a preview\nof what would happen plus an ",{"type":40,"tag":109,"props":239,"children":241},{"className":240},[],[242],{"type":46,"value":243},"mcp_confirmation_token",{"type":46,"value":245},".",{"type":40,"tag":220,"props":247,"children":248},{},[249,254,256,261,263,269],{"type":40,"tag":55,"props":250,"children":251},{},[252],{"type":46,"value":253},"Confirm.",{"type":46,"value":255}," Show the preview to the user. After they approve, call the ",{"type":40,"tag":55,"props":257,"children":258},{},[259],{"type":46,"value":260},"same\ntool with the same arguments",{"type":46,"value":262},", adding the confirmation token and a stable\n",{"type":40,"tag":109,"props":264,"children":266},{"className":265},[],[267],{"type":46,"value":268},"idempotency_key",{"type":46,"value":245},{"type":40,"tag":49,"props":271,"children":272},{},[273,278],{"type":40,"tag":55,"props":274,"children":275},{},[276],{"type":46,"value":277},"Never call step 2 without the user's approval of the actual preview.",{"type":46,"value":279}," Do not treat\na general \"yes, do it\" from earlier in the conversation as approval for a preview the\nuser has not seen. The preview is the thing being approved.",{"type":40,"tag":281,"props":282,"children":284},"h3",{"id":283},"idempotency",[285],{"type":46,"value":286},"Idempotency",{"type":40,"tag":288,"props":289,"children":290},"ul",{},[291,310,320],{"type":40,"tag":220,"props":292,"children":293},{},[294,296,301,303,308],{"type":46,"value":295},"Money-movement operations ",{"type":40,"tag":55,"props":297,"children":298},{},[299],{"type":46,"value":300},"require",{"type":46,"value":302}," an ",{"type":40,"tag":109,"props":304,"children":306},{"className":305},[],[307],{"type":46,"value":268},{"type":46,"value":309},". Generate one stable key\nper logical operation.",{"type":40,"tag":220,"props":311,"children":312},{},[313,318],{"type":40,"tag":55,"props":314,"children":315},{},[316],{"type":46,"value":317},"Retrying a call reuses the same key.",{"type":46,"value":319}," A new key on a retry is a second payment,\nnot a retry.",{"type":40,"tag":220,"props":321,"children":322},{},[323,325,330,332,338,340,346],{"type":46,"value":324},"If an outcome comes back unknown or the call times out, ",{"type":40,"tag":55,"props":326,"children":327},{},[328],{"type":46,"value":329},"do not fire again\nblindly",{"type":46,"value":331}," — verify with the matching ",{"type":40,"tag":109,"props":333,"children":335},{"className":334},[],[336],{"type":46,"value":337},"get",{"type":46,"value":339},"\u002F",{"type":40,"tag":109,"props":341,"children":343},{"className":342},[],[344],{"type":46,"value":345},"list",{"type":46,"value":347}," first, then retry with the\noriginal key.",{"type":40,"tag":281,"props":349,"children":351},{"id":350},"what-counts-as-consequential",[352],{"type":46,"value":353},"What counts as consequential",{"type":40,"tag":49,"props":355,"children":356},{},[357],{"type":46,"value":358},"Prepare-and-confirm is set per operation on the server, so treat the token in the\nresponse as the source of truth rather than this list. In practice it covers:",{"type":40,"tag":288,"props":360,"children":361},{},[362,372,390,400,434],{"type":40,"tag":220,"props":363,"children":364},{},[365,370],{"type":40,"tag":55,"props":366,"children":367},{},[368],{"type":46,"value":369},"Money movement",{"type":46,"value":371}," — creating, refunding, retrying, or voiding payments; payouts\nand payout cancels; transfers; swaps; deposits; topups; marking invoices paid,\nuncollectible, or void; ad-campaign payment retries; bounties and bounty cancels.",{"type":40,"tag":220,"props":373,"children":374},{},[375,380,382,388],{"type":40,"tag":55,"props":376,"children":377},{},[378],{"type":46,"value":379},"Financial configuration",{"type":46,"value":381}," — issuing or updating cards; fee markups; payout\nmethods; extending or adding free days to a membership; ",{"type":40,"tag":109,"props":383,"children":385},{"className":384},[],[386],{"type":46,"value":387},"media generate",{"type":46,"value":389},"; payment\nmethod domains; setup intents and return URLs.",{"type":40,"tag":220,"props":391,"children":392},{},[393,398],{"type":40,"tag":55,"props":394,"children":395},{},[396],{"type":46,"value":397},"Credentials",{"type":46,"value":399}," — creating access tokens and API keys.",{"type":40,"tag":220,"props":401,"children":402},{},[403,408,410,416,418,424,426,432],{"type":40,"tag":55,"props":404,"children":405},{},[406],{"type":46,"value":407},"Shipping code",{"type":46,"value":409}," — ",{"type":40,"tag":109,"props":411,"children":413},{"className":412},[],[414],{"type":46,"value":415},"apps_deploy",{"type":46,"value":417}," builds the app's current source and, unless you\npass ",{"type":40,"tag":109,"props":419,"children":421},{"className":420},[],[422],{"type":46,"value":423},"draft: true",{"type":46,"value":425},", promotes it to production. ",{"type":40,"tag":109,"props":427,"children":429},{"className":428},[],[430],{"type":46,"value":431},"app_builds_promote",{"type":46,"value":433}," has the same\nend effect. Both change what real users see; both require confirmation.",{"type":40,"tag":220,"props":435,"children":436},{},[437,442],{"type":40,"tag":55,"props":438,"children":439},{},[440],{"type":46,"value":441},"Destructive deletes",{"type":46,"value":443}," — anything classified destructive, e.g. deleting a fee markup.",{"type":40,"tag":49,"props":445,"children":446},{},[447,449,454],{"type":46,"value":448},"If a tool returns an ",{"type":40,"tag":109,"props":450,"children":452},{"className":451},[],[453],{"type":46,"value":243},{"type":46,"value":455},", the operation did not happen yet.\nSay so plainly rather than reporting success.",{"type":40,"tag":63,"props":457,"children":459},{"id":458},"_3-scope-what-the-grant-actually-allows",[460],{"type":46,"value":461},"3. Scope — what the grant actually allows",{"type":40,"tag":49,"props":463,"children":464},{},[465,467,476,478,483,485,491,493,499,501,506],{"type":46,"value":466},"The hosted endpoint requests the MCP ",{"type":40,"tag":55,"props":468,"children":469},{},[470],{"type":40,"tag":109,"props":471,"children":473},{"className":472},[],[474],{"type":46,"value":475},"admin",{"type":46,"value":477}," scope. ",{"type":40,"tag":109,"props":479,"children":481},{"className":480},[],[482],{"type":46,"value":194},{"type":46,"value":484},"\nreports it as ",{"type":40,"tag":109,"props":486,"children":488},{"className":487},[],[489],{"type":46,"value":490},"permission_profile: \"admin\"",{"type":46,"value":492}," with ",{"type":40,"tag":109,"props":494,"children":496},{"className":495},[],[497],{"type":46,"value":498},"granted_scopes: [\"*\"]",{"type":46,"value":500}," — match on\nthe profile, not on the literal string ",{"type":40,"tag":109,"props":502,"children":504},{"className":503},[],[505],{"type":46,"value":475},{"type":46,"value":507}," in the scope list.",{"type":40,"tag":49,"props":509,"children":510},{},[511,513,518],{"type":46,"value":512},"That is the full administrative profile for the reviewed MCP surface — not read-only,\nnot per-tool, and ",{"type":40,"tag":55,"props":514,"children":515},{},[516],{"type":46,"value":517},"not bound to a single business",{"type":46,"value":519},". It can act on every business the\nauthenticated Whop user manages.",{"type":40,"tag":49,"props":521,"children":522},{},[523],{"type":46,"value":524},"Two consequences worth stating to the user when it matters:",{"type":40,"tag":288,"props":526,"children":527},{},[528,540],{"type":40,"tag":220,"props":529,"children":530},{},[531,533,538],{"type":46,"value":532},"Confirm the ",{"type":40,"tag":55,"props":534,"children":535},{},[536],{"type":46,"value":537},"account id",{"type":46,"value":539}," before a write. \"The selected business\" may not be the\none they meant, and the grant will not stop you.",{"type":40,"tag":220,"props":541,"children":542},{},[543,545,549],{"type":46,"value":544},"Prepare-and-confirm reduces accidental and duplicate actions. It is ",{"type":40,"tag":55,"props":546,"children":547},{},[548],{"type":46,"value":235},{"type":46,"value":550}," a\nsecurity boundary — it does not shrink the privileges of the OAuth grant.",{"type":40,"tag":49,"props":552,"children":553},{},[554],{"type":46,"value":555},"Tell the user to disconnect the integration when they no longer need it.",{"type":40,"tag":63,"props":557,"children":559},{"id":558},"reporting-outcomes",[560],{"type":46,"value":561},"Reporting outcomes",{"type":40,"tag":288,"props":563,"children":564},{},[565,570,575],{"type":40,"tag":220,"props":566,"children":567},{},[568],{"type":46,"value":569},"Confirmation token returned, not yet confirmed → \"prepared, awaiting your approval.\"",{"type":40,"tag":220,"props":571,"children":572},{},[573],{"type":46,"value":574},"Confirmed and succeeded → say what moved, and include the resulting id.",{"type":40,"tag":220,"props":576,"children":577},{},[578],{"type":46,"value":579},"Unknown or timed out → say it is unknown, verify with a read, and never assume.",{"items":581,"total":634},[582,601,615,627],{"slug":583,"name":583,"fn":584,"description":585,"org":586,"tags":587,"stars":598,"repoUrl":599,"updatedAt":600},"whop-payments-network","integrate Whop Payments Network","Integrate the Whop Payments Network into your platform — pay-ins, payouts, checkout, embedded components, API patterns, and webhooks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[588,591,594,597],{"name":589,"slug":590,"type":16},"API Development","api-development",{"name":592,"slug":593,"type":16},"Payments","payments",{"name":595,"slug":596,"type":16},"Webhooks","webhooks",{"name":9,"slug":8,"type":16},1,"https:\u002F\u002Fgithub.com\u002Fwhopio\u002Fwhop-payments-network-skill","2026-04-06T18:57:39.593857",{"slug":8,"name":8,"fn":602,"description":603,"org":604,"tags":605,"stars":24,"repoUrl":25,"updatedAt":614},"manage business operations on Whop","Run a business on Whop: websites on *.whop.app, products, checkout, payments, payouts, memberships, ads, LLC\u002FC-corp formation, bounties, and stats. Use when the user mentions Whop, whop.com, their store, a membership or product, checkout links, payouts or transfers, Meta\u002FTikTok ads, forming a company, or anything the Whop MCP tools provide. Not for the internal `whopdev` local-dev CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[606,609,612,613],{"name":607,"slug":608,"type":16},"E-commerce","e-commerce",{"name":610,"slug":611,"type":16},"Operations","operations",{"name":592,"slug":593,"type":16},{"name":9,"slug":8,"type":16},"2026-08-28T15:09:33.313165",{"slug":616,"name":616,"fn":617,"description":618,"org":619,"tags":620,"stars":24,"repoUrl":25,"updatedAt":626},"whop-connect","connect and verify Whop account","Connect and verify this workspace's Whop account",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[621,624,625],{"name":622,"slug":623,"type":16},"Integrations","integrations",{"name":610,"slug":611,"type":16},{"name":9,"slug":8,"type":16},"2026-08-28T15:10:16.83957",{"slug":4,"name":4,"fn":5,"description":6,"org":628,"tags":629,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[630,631,632,633],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},4,{"items":636,"total":657},[637,644,650],{"slug":8,"name":8,"fn":602,"description":603,"org":638,"tags":639,"stars":24,"repoUrl":25,"updatedAt":614},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[640,641,642,643],{"name":607,"slug":608,"type":16},{"name":610,"slug":611,"type":16},{"name":592,"slug":593,"type":16},{"name":9,"slug":8,"type":16},{"slug":616,"name":616,"fn":617,"description":618,"org":645,"tags":646,"stars":24,"repoUrl":25,"updatedAt":626},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[647,648,649],{"name":622,"slug":623,"type":16},{"name":610,"slug":611,"type":16},{"name":9,"slug":8,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":651,"tags":652,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[653,654,655,656],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},3]