[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-algolia-algolia-migration":3,"mdc-yfwfan-key":37,"related-org-algolia-algolia-migration":1108,"related-repo-algolia-algolia-migration":1283},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":32,"sourceUrl":35,"mdContent":36},"algolia-migration","migrate Algolia API client versions","Migrate existing Algolia API client code to a newer major version. Triggers on: upgrading algoliasearch, moving from initIndex to client methods, fixing \"initIndex is not a function\", updating imports after a version bump, handling breaking changes from v3→v4 or v4→v5, replacing .wait() chaining, or any mention of \"migrate Algolia client\", \"upgrade Algolia SDK\", or a specific old-to-new version (e.g. \"Python v3 to v4\", \"JS v4 to v5\"). Covers JavaScript, Python, Go, PHP, Java, C#, Ruby, Kotlin, Scala, Swift. Dart is a new client and is excluded from scope. Do NOT use for new project setup (use algolia-cli or algolia-mcp instead), InstantSearch \u002F frontend frameworks, analytics queries, or recommendations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"algolia","Algolia","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Falgolia.png",[12,14,17],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Migration","migration",{"name":18,"slug":19,"type":13},"API Development","api-development",8,"https:\u002F\u002Fgithub.com\u002Falgolia\u002Fskills","2026-07-25T05:56:30.664567","MIT",2,[26,27,8,28,29,30,31],"agent","ai-assistant","mcp","recommendations","search","skills",{"repoUrl":21,"stars":20,"forks":24,"topics":33,"description":34},[26,27,8,28,29,30,31],"Algolia skills for AI Agents","https:\u002F\u002Fgithub.com\u002Falgolia\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Falgolia-migration","---\nname: algolia-migration\ndescription: >-\n  Migrate existing Algolia API client code to a newer major version.\n  Triggers on: upgrading algoliasearch, moving from initIndex to client methods,\n  fixing \"initIndex is not a function\", updating imports after a version bump,\n  handling breaking changes from v3→v4 or v4→v5, replacing .wait() chaining,\n  or any mention of \"migrate Algolia client\", \"upgrade Algolia SDK\", or a\n  specific old-to-new version (e.g. \"Python v3 to v4\", \"JS v4 to v5\").\n  Covers JavaScript, Python, Go, PHP, Java, C#, Ruby, Kotlin, Scala, Swift. Dart is a new client and is excluded from scope.\n  Do NOT use for new project setup (use algolia-cli or algolia-mcp instead),\n  InstantSearch \u002F frontend frameworks, analytics queries, or recommendations.\nlicense: MIT\nmetadata:\n  author: algolia\n  version: \"1.0\"\n---\n\n# Algolia API Client Migration\n\n> This skill covers **API client upgrades** (backend and frontend search-only builds).\n> For frontend search UI, see **instantsearch**. For index operations, see **algolia-cli**.\n\n## Supported migrations\n\n| Language   | Migration    | Reference |\n|------------|--------------|-----------|\n| JavaScript | v4 → v5      | [references\u002Fjavascript.md](references\u002Fjavascript.md) |\n| Python     | v3 → v4      | [references\u002Fpython.md](references\u002Fpython.md) |\n| Go         | v3 → v4      | [references\u002Fgo.md](references\u002Fgo.md) |\n| PHP        | v3 → v4      | [references\u002Fphp.md](references\u002Fphp.md) |\n| Java       | v3 → v4      | [references\u002Fjava.md](references\u002Fjava.md) |\n| C#         | v6 → v7      | [references\u002Fcsharp.md](references\u002Fcsharp.md) |\n| Ruby       | v2 → v3      | [references\u002Fruby.md](references\u002Fruby.md) |\n| Kotlin     | v2 → v3      | [references\u002Fkotlin.md](references\u002Fkotlin.md) |\n| Scala      | v1 → v2      | [references\u002Fscala.md](references\u002Fscala.md) |\n| Swift      | v8 → v9      | [references\u002Fswift.md](references\u002Fswift.md) |\n\nOpen the matching reference file before writing any migration code.\n\n## Universal breaking changes\n\nEvery language migration shares the same set of architectural shifts. Understand these first; the reference files add language-specific syntax on top.\n\n### 1. `initIndex` is gone\n\nThe index object pattern is eliminated in every language. All methods moved to the **client** with `indexName` as an explicit parameter.\n\n**The fix:** remove `initIndex` \u002F `init_index` \u002F `index(withName:)`, call the method on the client, pass `indexName`.\n\n**Grep to find all affected call sites:**\n```\ngrep -r \"initIndex\\|init_index\\|InitIndex\\|index(withName\" .\n```\n\n### 2. `.wait()` chaining is gone\n\nChained `.wait()` \u002F `!` bang methods on task responses are replaced by dedicated wait helpers.\n\n| Old | New |\n|-----|-----|\n| `index.saveObjects(records).wait()` | `client.waitForTask(...)` with the index name and task ID |\n| `index.save_objects!(objects)` (Ruby) | `client.save_objects(index_name, objects, true)` |\n\nThree helpers available in every language: `waitForTask`, `waitForAppTask`, `waitForApiKey`. The exact calling convention varies by language (e.g. JS v5 takes an options object, Python uses keyword arguments) — see the language reference for the precise signature.\n\n### 3. `copyIndex` \u002F `moveIndex` → `operationIndex`\n\nAll index copy and move operations, including scoped copies (`copyRules`, `copySettings`, `copySynonyms`), consolidate into a single `operationIndex` call with `operation: \"copy\"` or `\"move\"` and an optional `scope` array.\n\n### 4. `objectID` is required in `saveObjects`\n\n`autoGenerateObjectIDIfNotExist` is removed. Every object passed to `saveObjects` must include an explicit `objectID`. To let the API generate IDs, use `chunkedBatch` with `action: addObject`.\n\n### 5. `replaceAllObjects` — `scopes` is optional\n\nThe `safe` option is removed. The `scopes` parameter defaults to `[\"settings\", \"rules\", \"synonyms\"]` in every language — you only need to pass it explicitly if you want a subset.\n\n### 6. Browse helpers change pattern\n\nThe old iterator\u002Fchained patterns are gone. The new pattern **varies by language** — check the reference file:\n\n- **Aggregator callback** (JS, Python, Go, Ruby, Scala, Swift): pass an `aggregator` function that receives each page response\n- **Iterable** (C#, Java): the helper returns an `IEnumerable\u003CT>` \u002F `Iterable\u003CT>` — iterate with `foreach` or `.forEach()`\n- **Iterable \u002F foreach** (PHP): the method returns `ObjectIterator` — iterate with a for-each loop\n\n### 7. `AccountClient` is gone\n\nCross-application index copies now require composing helpers across two client instances manually: get settings from source, set on destination; browse + save for rules, synonyms, and objects.\n\nJavaScript exception: v5 ships `client.accountCopyIndex({ sourceIndexName, destinationAppID, destinationApiKey, destinationIndexName, ... })` as a built-in. No manual composition needed, but the call signature differs from v4's `accountCopyIndex(srcIndex, destIndex)` — see references\u002Fjavascript.md.\n\n### 8. Dedicated clients per API\n\nEach API now has its own client class. If the code previously imported one monolithic client, update imports for `RecommendClient`, `AnalyticsClient`, `AbtestingClient`, etc.\n\n## Migration workflow\n\n1. **Detect language and version** from the project's package manifest (`package.json`, `go.mod`, `composer.json`, `pom.xml`, `Gemfile`, etc.).\n2. **Open the matching reference file** from the table above.\n3. **Grep for `initIndex`** (and language equivalents) to enumerate all call sites.\n4. **Update the install \u002F dependency** first so the compiler\u002Fruntime flags all remaining issues.\n5. **Apply universal changes** (sections above) before language-specific ones.\n6. **Replace wait patterns** — search for `.wait()`, `waitTask`, `wait_task`, bang methods.\n7. **Verify** by running the existing test suite or a minimal integration test.\n\n## Direct Invocation\n\nIf the skill doesn't trigger automatically, invoke it directly:\n\n- **`\u002Falgolia-migration`** — Load the full skill for any Algolia client upgrade task\n\nThis is useful when the request is brief (e.g., \"update my Algolia imports\") and the skill might not auto-trigger.\n",{"data":38,"body":41},{"name":4,"description":6,"license":23,"metadata":39},{"author":8,"version":40},"1.0",{"type":42,"children":43},"root",[44,53,85,92,331,336,342,347,363,383,421,429,441,455,474,542,570,597,655,675,714,736,764,770,782,861,874,879,900,906,933,939,1075,1081,1086,1103],{"type":45,"tag":46,"props":47,"children":49},"element","h1",{"id":48},"algolia-api-client-migration",[50],{"type":51,"value":52},"text","Algolia API Client Migration",{"type":45,"tag":54,"props":55,"children":56},"blockquote",{},[57],{"type":45,"tag":58,"props":59,"children":60},"p",{},[61,63,69,71,76,78,83],{"type":51,"value":62},"This skill covers ",{"type":45,"tag":64,"props":65,"children":66},"strong",{},[67],{"type":51,"value":68},"API client upgrades",{"type":51,"value":70}," (backend and frontend search-only builds).\nFor frontend search UI, see ",{"type":45,"tag":64,"props":72,"children":73},{},[74],{"type":51,"value":75},"instantsearch",{"type":51,"value":77},". For index operations, see ",{"type":45,"tag":64,"props":79,"children":80},{},[81],{"type":51,"value":82},"algolia-cli",{"type":51,"value":84},".",{"type":45,"tag":86,"props":87,"children":89},"h2",{"id":88},"supported-migrations",[90],{"type":51,"value":91},"Supported migrations",{"type":45,"tag":93,"props":94,"children":95},"table",{},[96,119],{"type":45,"tag":97,"props":98,"children":99},"thead",{},[100],{"type":45,"tag":101,"props":102,"children":103},"tr",{},[104,110,114],{"type":45,"tag":105,"props":106,"children":107},"th",{},[108],{"type":51,"value":109},"Language",{"type":45,"tag":105,"props":111,"children":112},{},[113],{"type":51,"value":15},{"type":45,"tag":105,"props":115,"children":116},{},[117],{"type":51,"value":118},"Reference",{"type":45,"tag":120,"props":121,"children":122},"tbody",{},[123,146,167,187,207,227,248,269,289,310],{"type":45,"tag":101,"props":124,"children":125},{},[126,132,137],{"type":45,"tag":127,"props":128,"children":129},"td",{},[130],{"type":51,"value":131},"JavaScript",{"type":45,"tag":127,"props":133,"children":134},{},[135],{"type":51,"value":136},"v4 → v5",{"type":45,"tag":127,"props":138,"children":139},{},[140],{"type":45,"tag":141,"props":142,"children":144},"a",{"href":143},"references\u002Fjavascript.md",[145],{"type":51,"value":143},{"type":45,"tag":101,"props":147,"children":148},{},[149,154,159],{"type":45,"tag":127,"props":150,"children":151},{},[152],{"type":51,"value":153},"Python",{"type":45,"tag":127,"props":155,"children":156},{},[157],{"type":51,"value":158},"v3 → v4",{"type":45,"tag":127,"props":160,"children":161},{},[162],{"type":45,"tag":141,"props":163,"children":165},{"href":164},"references\u002Fpython.md",[166],{"type":51,"value":164},{"type":45,"tag":101,"props":168,"children":169},{},[170,175,179],{"type":45,"tag":127,"props":171,"children":172},{},[173],{"type":51,"value":174},"Go",{"type":45,"tag":127,"props":176,"children":177},{},[178],{"type":51,"value":158},{"type":45,"tag":127,"props":180,"children":181},{},[182],{"type":45,"tag":141,"props":183,"children":185},{"href":184},"references\u002Fgo.md",[186],{"type":51,"value":184},{"type":45,"tag":101,"props":188,"children":189},{},[190,195,199],{"type":45,"tag":127,"props":191,"children":192},{},[193],{"type":51,"value":194},"PHP",{"type":45,"tag":127,"props":196,"children":197},{},[198],{"type":51,"value":158},{"type":45,"tag":127,"props":200,"children":201},{},[202],{"type":45,"tag":141,"props":203,"children":205},{"href":204},"references\u002Fphp.md",[206],{"type":51,"value":204},{"type":45,"tag":101,"props":208,"children":209},{},[210,215,219],{"type":45,"tag":127,"props":211,"children":212},{},[213],{"type":51,"value":214},"Java",{"type":45,"tag":127,"props":216,"children":217},{},[218],{"type":51,"value":158},{"type":45,"tag":127,"props":220,"children":221},{},[222],{"type":45,"tag":141,"props":223,"children":225},{"href":224},"references\u002Fjava.md",[226],{"type":51,"value":224},{"type":45,"tag":101,"props":228,"children":229},{},[230,235,240],{"type":45,"tag":127,"props":231,"children":232},{},[233],{"type":51,"value":234},"C#",{"type":45,"tag":127,"props":236,"children":237},{},[238],{"type":51,"value":239},"v6 → v7",{"type":45,"tag":127,"props":241,"children":242},{},[243],{"type":45,"tag":141,"props":244,"children":246},{"href":245},"references\u002Fcsharp.md",[247],{"type":51,"value":245},{"type":45,"tag":101,"props":249,"children":250},{},[251,256,261],{"type":45,"tag":127,"props":252,"children":253},{},[254],{"type":51,"value":255},"Ruby",{"type":45,"tag":127,"props":257,"children":258},{},[259],{"type":51,"value":260},"v2 → v3",{"type":45,"tag":127,"props":262,"children":263},{},[264],{"type":45,"tag":141,"props":265,"children":267},{"href":266},"references\u002Fruby.md",[268],{"type":51,"value":266},{"type":45,"tag":101,"props":270,"children":271},{},[272,277,281],{"type":45,"tag":127,"props":273,"children":274},{},[275],{"type":51,"value":276},"Kotlin",{"type":45,"tag":127,"props":278,"children":279},{},[280],{"type":51,"value":260},{"type":45,"tag":127,"props":282,"children":283},{},[284],{"type":45,"tag":141,"props":285,"children":287},{"href":286},"references\u002Fkotlin.md",[288],{"type":51,"value":286},{"type":45,"tag":101,"props":290,"children":291},{},[292,297,302],{"type":45,"tag":127,"props":293,"children":294},{},[295],{"type":51,"value":296},"Scala",{"type":45,"tag":127,"props":298,"children":299},{},[300],{"type":51,"value":301},"v1 → v2",{"type":45,"tag":127,"props":303,"children":304},{},[305],{"type":45,"tag":141,"props":306,"children":308},{"href":307},"references\u002Fscala.md",[309],{"type":51,"value":307},{"type":45,"tag":101,"props":311,"children":312},{},[313,318,323],{"type":45,"tag":127,"props":314,"children":315},{},[316],{"type":51,"value":317},"Swift",{"type":45,"tag":127,"props":319,"children":320},{},[321],{"type":51,"value":322},"v8 → v9",{"type":45,"tag":127,"props":324,"children":325},{},[326],{"type":45,"tag":141,"props":327,"children":329},{"href":328},"references\u002Fswift.md",[330],{"type":51,"value":328},{"type":45,"tag":58,"props":332,"children":333},{},[334],{"type":51,"value":335},"Open the matching reference file before writing any migration code.",{"type":45,"tag":86,"props":337,"children":339},{"id":338},"universal-breaking-changes",[340],{"type":51,"value":341},"Universal breaking changes",{"type":45,"tag":58,"props":343,"children":344},{},[345],{"type":51,"value":346},"Every language migration shares the same set of architectural shifts. Understand these first; the reference files add language-specific syntax on top.",{"type":45,"tag":348,"props":349,"children":351},"h3",{"id":350},"_1-initindex-is-gone",[352,354,361],{"type":51,"value":353},"1. ",{"type":45,"tag":355,"props":356,"children":358},"code",{"className":357},[],[359],{"type":51,"value":360},"initIndex",{"type":51,"value":362}," is gone",{"type":45,"tag":58,"props":364,"children":365},{},[366,368,373,375,381],{"type":51,"value":367},"The index object pattern is eliminated in every language. All methods moved to the ",{"type":45,"tag":64,"props":369,"children":370},{},[371],{"type":51,"value":372},"client",{"type":51,"value":374}," with ",{"type":45,"tag":355,"props":376,"children":378},{"className":377},[],[379],{"type":51,"value":380},"indexName",{"type":51,"value":382}," as an explicit parameter.",{"type":45,"tag":58,"props":384,"children":385},{},[386,391,393,398,400,406,407,413,415,420],{"type":45,"tag":64,"props":387,"children":388},{},[389],{"type":51,"value":390},"The fix:",{"type":51,"value":392}," remove ",{"type":45,"tag":355,"props":394,"children":396},{"className":395},[],[397],{"type":51,"value":360},{"type":51,"value":399}," \u002F ",{"type":45,"tag":355,"props":401,"children":403},{"className":402},[],[404],{"type":51,"value":405},"init_index",{"type":51,"value":399},{"type":45,"tag":355,"props":408,"children":410},{"className":409},[],[411],{"type":51,"value":412},"index(withName:)",{"type":51,"value":414},", call the method on the client, pass ",{"type":45,"tag":355,"props":416,"children":418},{"className":417},[],[419],{"type":51,"value":380},{"type":51,"value":84},{"type":45,"tag":58,"props":422,"children":423},{},[424],{"type":45,"tag":64,"props":425,"children":426},{},[427],{"type":51,"value":428},"Grep to find all affected call sites:",{"type":45,"tag":430,"props":431,"children":435},"pre",{"className":432,"code":434,"language":51},[433],"language-text","grep -r \"initIndex\\|init_index\\|InitIndex\\|index(withName\" .\n",[436],{"type":45,"tag":355,"props":437,"children":439},{"__ignoreMap":438},"",[440],{"type":51,"value":434},{"type":45,"tag":348,"props":442,"children":444},{"id":443},"_2-wait-chaining-is-gone",[445,447,453],{"type":51,"value":446},"2. ",{"type":45,"tag":355,"props":448,"children":450},{"className":449},[],[451],{"type":51,"value":452},".wait()",{"type":51,"value":454}," chaining is gone",{"type":45,"tag":58,"props":456,"children":457},{},[458,460,465,466,472],{"type":51,"value":459},"Chained ",{"type":45,"tag":355,"props":461,"children":463},{"className":462},[],[464],{"type":51,"value":452},{"type":51,"value":399},{"type":45,"tag":355,"props":467,"children":469},{"className":468},[],[470],{"type":51,"value":471},"!",{"type":51,"value":473}," bang methods on task responses are replaced by dedicated wait helpers.",{"type":45,"tag":93,"props":475,"children":476},{},[477,493],{"type":45,"tag":97,"props":478,"children":479},{},[480],{"type":45,"tag":101,"props":481,"children":482},{},[483,488],{"type":45,"tag":105,"props":484,"children":485},{},[486],{"type":51,"value":487},"Old",{"type":45,"tag":105,"props":489,"children":490},{},[491],{"type":51,"value":492},"New",{"type":45,"tag":120,"props":494,"children":495},{},[496,519],{"type":45,"tag":101,"props":497,"children":498},{},[499,508],{"type":45,"tag":127,"props":500,"children":501},{},[502],{"type":45,"tag":355,"props":503,"children":505},{"className":504},[],[506],{"type":51,"value":507},"index.saveObjects(records).wait()",{"type":45,"tag":127,"props":509,"children":510},{},[511,517],{"type":45,"tag":355,"props":512,"children":514},{"className":513},[],[515],{"type":51,"value":516},"client.waitForTask(...)",{"type":51,"value":518}," with the index name and task ID",{"type":45,"tag":101,"props":520,"children":521},{},[522,533],{"type":45,"tag":127,"props":523,"children":524},{},[525,531],{"type":45,"tag":355,"props":526,"children":528},{"className":527},[],[529],{"type":51,"value":530},"index.save_objects!(objects)",{"type":51,"value":532}," (Ruby)",{"type":45,"tag":127,"props":534,"children":535},{},[536],{"type":45,"tag":355,"props":537,"children":539},{"className":538},[],[540],{"type":51,"value":541},"client.save_objects(index_name, objects, true)",{"type":45,"tag":58,"props":543,"children":544},{},[545,547,553,555,561,562,568],{"type":51,"value":546},"Three helpers available in every language: ",{"type":45,"tag":355,"props":548,"children":550},{"className":549},[],[551],{"type":51,"value":552},"waitForTask",{"type":51,"value":554},", ",{"type":45,"tag":355,"props":556,"children":558},{"className":557},[],[559],{"type":51,"value":560},"waitForAppTask",{"type":51,"value":554},{"type":45,"tag":355,"props":563,"children":565},{"className":564},[],[566],{"type":51,"value":567},"waitForApiKey",{"type":51,"value":569},". The exact calling convention varies by language (e.g. JS v5 takes an options object, Python uses keyword arguments) — see the language reference for the precise signature.",{"type":45,"tag":348,"props":571,"children":573},{"id":572},"_3-copyindex-moveindex-operationindex",[574,576,582,583,589,591],{"type":51,"value":575},"3. ",{"type":45,"tag":355,"props":577,"children":579},{"className":578},[],[580],{"type":51,"value":581},"copyIndex",{"type":51,"value":399},{"type":45,"tag":355,"props":584,"children":586},{"className":585},[],[587],{"type":51,"value":588},"moveIndex",{"type":51,"value":590}," → ",{"type":45,"tag":355,"props":592,"children":594},{"className":593},[],[595],{"type":51,"value":596},"operationIndex",{"type":45,"tag":58,"props":598,"children":599},{},[600,602,608,609,615,616,622,624,629,631,637,639,645,647,653],{"type":51,"value":601},"All index copy and move operations, including scoped copies (",{"type":45,"tag":355,"props":603,"children":605},{"className":604},[],[606],{"type":51,"value":607},"copyRules",{"type":51,"value":554},{"type":45,"tag":355,"props":610,"children":612},{"className":611},[],[613],{"type":51,"value":614},"copySettings",{"type":51,"value":554},{"type":45,"tag":355,"props":617,"children":619},{"className":618},[],[620],{"type":51,"value":621},"copySynonyms",{"type":51,"value":623},"), consolidate into a single ",{"type":45,"tag":355,"props":625,"children":627},{"className":626},[],[628],{"type":51,"value":596},{"type":51,"value":630}," call with ",{"type":45,"tag":355,"props":632,"children":634},{"className":633},[],[635],{"type":51,"value":636},"operation: \"copy\"",{"type":51,"value":638}," or ",{"type":45,"tag":355,"props":640,"children":642},{"className":641},[],[643],{"type":51,"value":644},"\"move\"",{"type":51,"value":646}," and an optional ",{"type":45,"tag":355,"props":648,"children":650},{"className":649},[],[651],{"type":51,"value":652},"scope",{"type":51,"value":654}," array.",{"type":45,"tag":348,"props":656,"children":658},{"id":657},"_4-objectid-is-required-in-saveobjects",[659,661,667,669],{"type":51,"value":660},"4. ",{"type":45,"tag":355,"props":662,"children":664},{"className":663},[],[665],{"type":51,"value":666},"objectID",{"type":51,"value":668}," is required in ",{"type":45,"tag":355,"props":670,"children":672},{"className":671},[],[673],{"type":51,"value":674},"saveObjects",{"type":45,"tag":58,"props":676,"children":677},{},[678,684,686,691,693,698,700,706,707,713],{"type":45,"tag":355,"props":679,"children":681},{"className":680},[],[682],{"type":51,"value":683},"autoGenerateObjectIDIfNotExist",{"type":51,"value":685}," is removed. Every object passed to ",{"type":45,"tag":355,"props":687,"children":689},{"className":688},[],[690],{"type":51,"value":674},{"type":51,"value":692}," must include an explicit ",{"type":45,"tag":355,"props":694,"children":696},{"className":695},[],[697],{"type":51,"value":666},{"type":51,"value":699},". To let the API generate IDs, use ",{"type":45,"tag":355,"props":701,"children":703},{"className":702},[],[704],{"type":51,"value":705},"chunkedBatch",{"type":51,"value":374},{"type":45,"tag":355,"props":708,"children":710},{"className":709},[],[711],{"type":51,"value":712},"action: addObject",{"type":51,"value":84},{"type":45,"tag":348,"props":715,"children":717},{"id":716},"_5-replaceallobjects-scopes-is-optional",[718,720,726,728,734],{"type":51,"value":719},"5. ",{"type":45,"tag":355,"props":721,"children":723},{"className":722},[],[724],{"type":51,"value":725},"replaceAllObjects",{"type":51,"value":727}," — ",{"type":45,"tag":355,"props":729,"children":731},{"className":730},[],[732],{"type":51,"value":733},"scopes",{"type":51,"value":735}," is optional",{"type":45,"tag":58,"props":737,"children":738},{},[739,741,747,749,754,756,762],{"type":51,"value":740},"The ",{"type":45,"tag":355,"props":742,"children":744},{"className":743},[],[745],{"type":51,"value":746},"safe",{"type":51,"value":748}," option is removed. The ",{"type":45,"tag":355,"props":750,"children":752},{"className":751},[],[753],{"type":51,"value":733},{"type":51,"value":755}," parameter defaults to ",{"type":45,"tag":355,"props":757,"children":759},{"className":758},[],[760],{"type":51,"value":761},"[\"settings\", \"rules\", \"synonyms\"]",{"type":51,"value":763}," in every language — you only need to pass it explicitly if you want a subset.",{"type":45,"tag":348,"props":765,"children":767},{"id":766},"_6-browse-helpers-change-pattern",[768],{"type":51,"value":769},"6. Browse helpers change pattern",{"type":45,"tag":58,"props":771,"children":772},{},[773,775,780],{"type":51,"value":774},"The old iterator\u002Fchained patterns are gone. The new pattern ",{"type":45,"tag":64,"props":776,"children":777},{},[778],{"type":51,"value":779},"varies by language",{"type":51,"value":781}," — check the reference file:",{"type":45,"tag":783,"props":784,"children":785},"ul",{},[786,805,843],{"type":45,"tag":787,"props":788,"children":789},"li",{},[790,795,797,803],{"type":45,"tag":64,"props":791,"children":792},{},[793],{"type":51,"value":794},"Aggregator callback",{"type":51,"value":796}," (JS, Python, Go, Ruby, Scala, Swift): pass an ",{"type":45,"tag":355,"props":798,"children":800},{"className":799},[],[801],{"type":51,"value":802},"aggregator",{"type":51,"value":804}," function that receives each page response",{"type":45,"tag":787,"props":806,"children":807},{},[808,813,815,821,822,828,830,836,837],{"type":45,"tag":64,"props":809,"children":810},{},[811],{"type":51,"value":812},"Iterable",{"type":51,"value":814}," (C#, Java): the helper returns an ",{"type":45,"tag":355,"props":816,"children":818},{"className":817},[],[819],{"type":51,"value":820},"IEnumerable\u003CT>",{"type":51,"value":399},{"type":45,"tag":355,"props":823,"children":825},{"className":824},[],[826],{"type":51,"value":827},"Iterable\u003CT>",{"type":51,"value":829}," — iterate with ",{"type":45,"tag":355,"props":831,"children":833},{"className":832},[],[834],{"type":51,"value":835},"foreach",{"type":51,"value":638},{"type":45,"tag":355,"props":838,"children":840},{"className":839},[],[841],{"type":51,"value":842},".forEach()",{"type":45,"tag":787,"props":844,"children":845},{},[846,851,853,859],{"type":45,"tag":64,"props":847,"children":848},{},[849],{"type":51,"value":850},"Iterable \u002F foreach",{"type":51,"value":852}," (PHP): the method returns ",{"type":45,"tag":355,"props":854,"children":856},{"className":855},[],[857],{"type":51,"value":858},"ObjectIterator",{"type":51,"value":860}," — iterate with a for-each loop",{"type":45,"tag":348,"props":862,"children":864},{"id":863},"_7-accountclient-is-gone",[865,867,873],{"type":51,"value":866},"7. ",{"type":45,"tag":355,"props":868,"children":870},{"className":869},[],[871],{"type":51,"value":872},"AccountClient",{"type":51,"value":362},{"type":45,"tag":58,"props":875,"children":876},{},[877],{"type":51,"value":878},"Cross-application index copies now require composing helpers across two client instances manually: get settings from source, set on destination; browse + save for rules, synonyms, and objects.",{"type":45,"tag":58,"props":880,"children":881},{},[882,884,890,892,898],{"type":51,"value":883},"JavaScript exception: v5 ships ",{"type":45,"tag":355,"props":885,"children":887},{"className":886},[],[888],{"type":51,"value":889},"client.accountCopyIndex({ sourceIndexName, destinationAppID, destinationApiKey, destinationIndexName, ... })",{"type":51,"value":891}," as a built-in. No manual composition needed, but the call signature differs from v4's ",{"type":45,"tag":355,"props":893,"children":895},{"className":894},[],[896],{"type":51,"value":897},"accountCopyIndex(srcIndex, destIndex)",{"type":51,"value":899}," — see references\u002Fjavascript.md.",{"type":45,"tag":348,"props":901,"children":903},{"id":902},"_8-dedicated-clients-per-api",[904],{"type":51,"value":905},"8. Dedicated clients per API",{"type":45,"tag":58,"props":907,"children":908},{},[909,911,917,918,924,925,931],{"type":51,"value":910},"Each API now has its own client class. If the code previously imported one monolithic client, update imports for ",{"type":45,"tag":355,"props":912,"children":914},{"className":913},[],[915],{"type":51,"value":916},"RecommendClient",{"type":51,"value":554},{"type":45,"tag":355,"props":919,"children":921},{"className":920},[],[922],{"type":51,"value":923},"AnalyticsClient",{"type":51,"value":554},{"type":45,"tag":355,"props":926,"children":928},{"className":927},[],[929],{"type":51,"value":930},"AbtestingClient",{"type":51,"value":932},", etc.",{"type":45,"tag":86,"props":934,"children":936},{"id":935},"migration-workflow",[937],{"type":51,"value":938},"Migration workflow",{"type":45,"tag":940,"props":941,"children":942},"ol",{},[943,989,999,1014,1024,1034,1065],{"type":45,"tag":787,"props":944,"children":945},{},[946,951,953,959,960,966,967,973,974,980,981,987],{"type":45,"tag":64,"props":947,"children":948},{},[949],{"type":51,"value":950},"Detect language and version",{"type":51,"value":952}," from the project's package manifest (",{"type":45,"tag":355,"props":954,"children":956},{"className":955},[],[957],{"type":51,"value":958},"package.json",{"type":51,"value":554},{"type":45,"tag":355,"props":961,"children":963},{"className":962},[],[964],{"type":51,"value":965},"go.mod",{"type":51,"value":554},{"type":45,"tag":355,"props":968,"children":970},{"className":969},[],[971],{"type":51,"value":972},"composer.json",{"type":51,"value":554},{"type":45,"tag":355,"props":975,"children":977},{"className":976},[],[978],{"type":51,"value":979},"pom.xml",{"type":51,"value":554},{"type":45,"tag":355,"props":982,"children":984},{"className":983},[],[985],{"type":51,"value":986},"Gemfile",{"type":51,"value":988},", etc.).",{"type":45,"tag":787,"props":990,"children":991},{},[992,997],{"type":45,"tag":64,"props":993,"children":994},{},[995],{"type":51,"value":996},"Open the matching reference file",{"type":51,"value":998}," from the table above.",{"type":45,"tag":787,"props":1000,"children":1001},{},[1002,1012],{"type":45,"tag":64,"props":1003,"children":1004},{},[1005,1007],{"type":51,"value":1006},"Grep for ",{"type":45,"tag":355,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":51,"value":360},{"type":51,"value":1013}," (and language equivalents) to enumerate all call sites.",{"type":45,"tag":787,"props":1015,"children":1016},{},[1017,1022],{"type":45,"tag":64,"props":1018,"children":1019},{},[1020],{"type":51,"value":1021},"Update the install \u002F dependency",{"type":51,"value":1023}," first so the compiler\u002Fruntime flags all remaining issues.",{"type":45,"tag":787,"props":1025,"children":1026},{},[1027,1032],{"type":45,"tag":64,"props":1028,"children":1029},{},[1030],{"type":51,"value":1031},"Apply universal changes",{"type":51,"value":1033}," (sections above) before language-specific ones.",{"type":45,"tag":787,"props":1035,"children":1036},{},[1037,1042,1044,1049,1050,1056,1057,1063],{"type":45,"tag":64,"props":1038,"children":1039},{},[1040],{"type":51,"value":1041},"Replace wait patterns",{"type":51,"value":1043}," — search for ",{"type":45,"tag":355,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":51,"value":452},{"type":51,"value":554},{"type":45,"tag":355,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":51,"value":1055},"waitTask",{"type":51,"value":554},{"type":45,"tag":355,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":51,"value":1062},"wait_task",{"type":51,"value":1064},", bang methods.",{"type":45,"tag":787,"props":1066,"children":1067},{},[1068,1073],{"type":45,"tag":64,"props":1069,"children":1070},{},[1071],{"type":51,"value":1072},"Verify",{"type":51,"value":1074}," by running the existing test suite or a minimal integration test.",{"type":45,"tag":86,"props":1076,"children":1078},{"id":1077},"direct-invocation",[1079],{"type":51,"value":1080},"Direct Invocation",{"type":45,"tag":58,"props":1082,"children":1083},{},[1084],{"type":51,"value":1085},"If the skill doesn't trigger automatically, invoke it directly:",{"type":45,"tag":783,"props":1087,"children":1088},{},[1089],{"type":45,"tag":787,"props":1090,"children":1091},{},[1092,1101],{"type":45,"tag":64,"props":1093,"children":1094},{},[1095],{"type":45,"tag":355,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":51,"value":1100},"\u002Falgolia-migration",{"type":51,"value":1102}," — Load the full skill for any Algolia client upgrade task",{"type":45,"tag":58,"props":1104,"children":1105},{},[1106],{"type":51,"value":1107},"This is useful when the request is brief (e.g., \"update my Algolia imports\") and the skill might not auto-trigger.",{"items":1109,"total":1282},[1110,1127,1144,1157,1172,1185,1198,1210,1228,1239,1250,1271],{"slug":1111,"name":1111,"fn":1112,"description":1113,"org":1114,"tags":1115,"stars":1124,"repoUrl":1125,"updatedAt":1126},"algolia-docsearch-mcp","search developer documentation with Algolia","Use this skill when the user asks about public developer documentation, SDKs, APIs, libraries, frameworks, setup, configuration, or code examples. Fetch current docs from Algolia DocSearch MCP and cite source URLs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1116,1117,1120,1122],{"name":9,"slug":8,"type":13},{"name":1118,"slug":1119,"type":13},"Documentation","documentation",{"name":1121,"slug":28,"type":13},"MCP",{"name":1123,"slug":30,"type":13},"Search",4365,"https:\u002F\u002Fgithub.com\u002Falgolia\u002Fdocsearch","2026-08-01T06:06:11.572314",{"slug":1128,"name":1128,"fn":1129,"description":1130,"org":1131,"tags":1132,"stars":20,"repoUrl":21,"updatedAt":1143},"algobot-cli","build conversational AI with Algolia","Use for anything AI\u002Fagent\u002Fconversational built on Algolia: algobot CLI, Agent Studio, RAG systems, conversational product discovery, genAI content generation from search results (carousels, descriptions, headers), chatbots or recommendation agents using Algolia as retrieval, config-as-code workflows, multi-environment deploy (dev\u002Fstaging\u002Fprod), memory and personalization, MCP tool integrations, conversation history \u002F GDPR retention, or adding a chat widget alongside InstantSearch. Trigger on: \"algobot\", \"Agent Studio\", \"RAG with Algolia\", \"conversational experience\", \"AI agent\" + Algolia, \"genAI carousel\", \"chat widget\", or building AI features on top of Algolia search. Do NOT use for raw index ops (records, synonyms, settings) — use algolia-cli. Do NOT use for pure frontend search UI (InstantSearch, autocomplete) with no AI\u002Fagent layer.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1133,1136,1139,1142],{"name":1134,"slug":1135,"type":13},"Agents","agents",{"name":1137,"slug":1138,"type":13},"Automation","automation",{"name":1140,"slug":1141,"type":13},"LLM","llm",{"name":1123,"slug":30,"type":13},"2026-07-12T08:27:37.649724",{"slug":1145,"name":1145,"fn":1146,"description":1147,"org":1148,"tags":1149,"stars":20,"repoUrl":21,"updatedAt":1156},"algolia-agent-studio","build conversational agents with Algolia Agent Studio","Product-specific Algolia Agent Studio implementation, validation, and optimization guidance. Use when planning, building, integrating, or auditing Agent Studio agents, AI-powered conversational experiences, LLM provider setup, Algolia Search tools, client-side tools, MCP tools, memory, prompting, conversations, turn context, caching, analytics, feedback, authentication, approved domains, guardrails, or tool security. Do NOT use for live Agent Studio configuration, dry runs, publish\u002Fdeploy actions, or config-as-code operations; use the official algobot-cli skill instead. Do NOT use for generic non-Algolia RAG or chatbot architecture unless Agent Studio is the target product.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1150,1151,1154,1155],{"name":1134,"slug":1135,"type":13},{"name":1152,"slug":1153,"type":13},"AI","ai",{"name":9,"slug":8,"type":13},{"name":1123,"slug":30,"type":13},"2026-08-01T06:06:28.033767",{"slug":1158,"name":1158,"fn":1159,"description":1160,"org":1161,"tags":1162,"stars":20,"repoUrl":21,"updatedAt":1171},"algolia-autocomplete","build Algolia autocomplete and query suggestions","Build and review Algolia Autocomplete and query suggestion experiences. Use when planning or implementing typeahead, query suggestions, recent searches, popular searches, federated autocomplete panels, product\u002Fcontent suggestions, detached mobile mode, plugins, keyboard navigation, insights events, or Autocomplete integration with InstantSearch. For net-new search or ecommerce builds, start with algolia-discovery-planning, which loads algolia-search-implementation so source strategy, data contract, and event taxonomy decisions are visible before autocomplete is marked ready. Do NOT use for full search results pages, browse pages, filters, pagination, or current refinements; use algolia-instantsearch-ui instead. Do NOT use for choosing between Algolia UI libraries; use algolia-ui-libraries. Do NOT use as the source of truth for current Autocomplete package APIs; use the official instantsearch skill and current docs alongside this customer-readiness skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1163,1164,1167,1168],{"name":9,"slug":8,"type":13},{"name":1165,"slug":1166,"type":13},"Frontend","frontend",{"name":1123,"slug":30,"type":13},{"name":1169,"slug":1170,"type":13},"UI Components","ui-components","2026-08-01T06:06:29.968123",{"slug":82,"name":82,"fn":1173,"description":1174,"org":1175,"tags":1176,"stars":20,"repoUrl":21,"updatedAt":1184},"manage Algolia indices and accounts","Use this skill whenever a user wants to execute operations against Algolia indices or accounts — deleting records, copying\u002Fmigrating indices, backing up data, importing\u002Fexporting records, managing API keys, editing synonyms, configuring rules, changing settings like facets, clearing indices, or automating Algolia in CI\u002FCD pipelines. The key signal is that the user wants to *act on* their Algolia data or configuration (server-side \u002F backend \u002F admin operations), regardless of whether they mention \"CLI\" or \"command line.\" If someone names a specific Algolia index and wants to change, move, query, or manage it, use this skill. Do NOT use for frontend search UI work (InstantSearch, React components, autocomplete widgets), Algolia dashboard GUI questions, or evaluating Algolia vs. other providers.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1177,1180,1183],{"name":1178,"slug":1179,"type":13},"CLI","cli",{"name":1181,"slug":1182,"type":13},"Data Engineering","data-engineering",{"name":1123,"slug":30,"type":13},"2026-07-12T08:27:35.085246",{"slug":1186,"name":1186,"fn":1187,"description":1188,"org":1189,"tags":1190,"stars":20,"repoUrl":21,"updatedAt":1197},"algolia-crawler","crawl websites into Algolia indices","Use this skill whenever a user wants to crawl one or more web pages or a whole site and turn them into an Algolia index using the Algolia CLI — especially for RAG, AI search, semantic search, or Agent Studio retrieval. Triggers: \"index my website\u002Fdocs with Algolia\", \"set up the Algolia Crawler\", \"crawl this page for RAG\", \"scrape my site into Algolia\", \"build a knowledge base for my AI agent from these URLs\", writing or debugging a crawler recordExtractor, or handling JavaScript-rendered pages that won't index. It guides ingestion end-to-end with `algolia crawler` commands: inspect the page, write a RAG-optimized recordExtractor, validate with `algolia crawler test` BEFORE indexing, apply index settings explicitly, then reindex. Do NOT use for building the chatbot\u002Fagent layer itself (use algobot-cli), raw record\u002Fsynonym\u002Fsettings ops on an existing index (use algolia-cli), frontend search UI (use instantsearch), or read-only search\u002Fanalytics (use algolia-mcp).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1191,1192,1193,1194],{"name":1137,"slug":1138,"type":13},{"name":1181,"slug":1182,"type":13},{"name":1123,"slug":30,"type":13},{"name":1195,"slug":1196,"type":13},"Web Scraping","web-scraping","2026-07-12T08:27:40.981109",{"slug":1199,"name":1199,"fn":1200,"description":1201,"org":1202,"tags":1203,"stars":20,"repoUrl":21,"updatedAt":1209},"algolia-data-modeling","design Algolia data models and indices","Algolia data modeling and indexing guidance. Use before or alongside indexing records or building Algolia search UI for net-new search, browse, autocomplete, ecommerce, personalization, Dynamic Re-Ranking, recommendations, or analytics-aware implementations. Makes record shape, objectID, display fields, facets, ranking fields, and event attribution explicit decisions. Use for records, variants, SKUs, indices, replicas, searchable and faceting attributes, denormalization, merchandising fields, timestamps, inventory, event attribution, indexing pipelines, partial updates, secured data, multi-language or multi-region strategies, and migrations. Do NOT use for live imports, exports, record mutations, settings changes, or account actions; use algolia-cli or algolia-mcp. Do NOT use for frontend UI implementation; use algolia-instantsearch-ui, algolia-autocomplete, algolia-ui-libraries, or the official instantsearch skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1204,1205,1208],{"name":9,"slug":8,"type":13},{"name":1206,"slug":1207,"type":13},"Data Modeling","data-modeling",{"name":1123,"slug":30,"type":13},"2026-08-01T06:06:01.500756",{"slug":1211,"name":1211,"fn":1212,"description":1213,"org":1214,"tags":1215,"stars":20,"repoUrl":21,"updatedAt":1227},"algolia-discovery-planning","plan and audit Algolia search implementations","START HERE for any non-trivial Algolia work — building, adding, migrating, redesigning, auditing, or configuring search, browse, autocomplete, indexing, relevance, recommendations, personalization, merchandising, events, or analytics. Invoke this FIRST even when the task already seems scoped or the user names one specific feature (e.g. \"add InstantSearch\", \"build a storefront search\"): its job is to map the request to the full Algolia implementation lifecycle and load every companion skill each in-scope phase needs (algolia-search-implementation, algolia-data-modeling, algolia-index-configuration, algolia-ui-libraries, algolia-instantsearch-ui, algolia-autocomplete, algolia-events-insights, algolia-neuralsearch, algolia-agent-studio, algolia-release-qa) rather than jumping straight into a single skill. This skill plans and orchestrates; the focused companion skills and the official Algolia skills execute. Do NOT use for live account inspection or write actions; use algolia-mcp or algolia-cli for those.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1216,1217,1220,1223,1226],{"name":9,"slug":8,"type":13},{"name":1218,"slug":1219,"type":13},"Analytics","analytics",{"name":1221,"slug":1222,"type":13},"Configuration","configuration",{"name":1224,"slug":1225,"type":13},"Personalization","personalization",{"name":1123,"slug":30,"type":13},"2026-08-01T06:06:03.021452",{"slug":1229,"name":1229,"fn":1230,"description":1231,"org":1232,"tags":1233,"stars":20,"repoUrl":21,"updatedAt":1238},"algolia-events-insights","instrument Algolia events for analytics","Algolia event instrumentation guidance for Insights, analytics, personalization, Dynamic Re-Ranking, Recommend, and merchandising feedback loops. Use for search, autocomplete, browse, ecommerce, personalization, recommendations, or analytics instrumentation. Makes event decisions explicit before an Algolia UI is considered ready. Use when implementing or auditing clickedObjectIDsAfterSearch, convertedObjectIDsAfterSearch, viewedObjectIDs, addedToCartObjectIDsAfterSearch, purchasedObjectIDsAfterSearch, userToken, queryID, eventName, eventSubtype, or frontend\u002Fbackend event pipelines. Do NOT use for live analytics retrieval, top-query inspection, or account-aware diagnostics; use algolia-mcp. Do NOT use for framework-specific InstantSearch or Autocomplete APIs; use the official instantsearch skill alongside this planning and validation skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1234,1235,1236,1237],{"name":9,"slug":8,"type":13},{"name":1218,"slug":1219,"type":13},{"name":1224,"slug":1225,"type":13},{"name":1123,"slug":30,"type":13},"2026-08-01T06:06:02.009712",{"slug":1240,"name":1240,"fn":1241,"description":1242,"org":1243,"tags":1244,"stars":20,"repoUrl":21,"updatedAt":1249},"algolia-index-configuration","configure Algolia index settings and relevance","Algolia index settings and relevance configuration guidance. Use when configuring searchableAttributes, attributesForFaceting, customRanking, ranking, replicas, virtual replicas, rules, synonyms, typo tolerance, distinct, filters, optional filters, merchandising, browse\u002Fcategory relevance, or A\u002FB-testable relevance changes. Do NOT use for live settings writes, backups, copies, or operational account tasks; use algolia-cli or algolia-mcp instead. Do NOT use for record-shape or variant strategy; use algolia-data-modeling instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1245,1246,1247,1248],{"name":9,"slug":8,"type":13},{"name":1221,"slug":1222,"type":13},{"name":1206,"slug":1207,"type":13},{"name":1123,"slug":30,"type":13},"2026-08-01T06:06:34.19163",{"slug":1251,"name":1251,"fn":1252,"description":1253,"org":1254,"tags":1255,"stars":20,"repoUrl":21,"updatedAt":1270},"algolia-instantsearch-ui","build Algolia InstantSearch frontend experiences","Build and review Algolia InstantSearch experiences in JavaScript, React, Vue, Angular (via InstantSearch.js; Angular InstantSearch is deprecated), or compatible frontend stacks. Use when planning or reviewing search results pages, browse\u002Fcategory pages, routing, widgets, filters, facets, sort-by, pagination, infinite hits, current refinements, insights middleware, SSR, or UI-state synchronization. For net-new search UI builds, start with algolia-discovery-planning, which loads algolia-search-implementation so data contract and event taxonomy decisions are visible before UI is marked ready. Do NOT use for autocomplete\u002Ftypeahead experiences before the user commits to a results page; use algolia-autocomplete instead. Do NOT use for choosing between Algolia UI libraries; use algolia-ui-libraries. Do NOT use as the source of truth for current framework APIs or code-level implementation details; use the official instantsearch skill and current docs alongside this customer-readiness skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1256,1257,1260,1261,1263,1266,1267],{"name":9,"slug":8,"type":13},{"name":1258,"slug":1259,"type":13},"Angular","angular",{"name":1165,"slug":1166,"type":13},{"name":131,"slug":1262,"type":13},"javascript",{"name":1264,"slug":1265,"type":13},"React","react",{"name":1123,"slug":30,"type":13},{"name":1268,"slug":1269,"type":13},"Vue","vue","2026-08-01T06:06:33.66513",{"slug":1272,"name":1272,"fn":1273,"description":1274,"org":1275,"tags":1276,"stars":20,"repoUrl":21,"updatedAt":1281},"algolia-mcp","search Algolia indices and retrieve analytics","Search Algolia indices via the Algolia MCP server, retrieve analytics (top searches, no-result rates, click positions, user counts), and get product recommendations (bought-together, related, trending). Triggers on search, indexing, analytics, Algolia, recommendations, MCP.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1277,1278,1279,1280],{"name":1218,"slug":1219,"type":13},{"name":18,"slug":19,"type":13},{"name":1121,"slug":28,"type":13},{"name":1123,"slug":30,"type":13},"2026-07-12T08:27:36.376387",19,{"items":1284,"total":1333},[1285,1292,1299,1306,1312,1319,1325],{"slug":1128,"name":1128,"fn":1129,"description":1130,"org":1286,"tags":1287,"stars":20,"repoUrl":21,"updatedAt":1143},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1288,1289,1290,1291],{"name":1134,"slug":1135,"type":13},{"name":1137,"slug":1138,"type":13},{"name":1140,"slug":1141,"type":13},{"name":1123,"slug":30,"type":13},{"slug":1145,"name":1145,"fn":1146,"description":1147,"org":1293,"tags":1294,"stars":20,"repoUrl":21,"updatedAt":1156},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1295,1296,1297,1298],{"name":1134,"slug":1135,"type":13},{"name":1152,"slug":1153,"type":13},{"name":9,"slug":8,"type":13},{"name":1123,"slug":30,"type":13},{"slug":1158,"name":1158,"fn":1159,"description":1160,"org":1300,"tags":1301,"stars":20,"repoUrl":21,"updatedAt":1171},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1302,1303,1304,1305],{"name":9,"slug":8,"type":13},{"name":1165,"slug":1166,"type":13},{"name":1123,"slug":30,"type":13},{"name":1169,"slug":1170,"type":13},{"slug":82,"name":82,"fn":1173,"description":1174,"org":1307,"tags":1308,"stars":20,"repoUrl":21,"updatedAt":1184},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1309,1310,1311],{"name":1178,"slug":1179,"type":13},{"name":1181,"slug":1182,"type":13},{"name":1123,"slug":30,"type":13},{"slug":1186,"name":1186,"fn":1187,"description":1188,"org":1313,"tags":1314,"stars":20,"repoUrl":21,"updatedAt":1197},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1315,1316,1317,1318],{"name":1137,"slug":1138,"type":13},{"name":1181,"slug":1182,"type":13},{"name":1123,"slug":30,"type":13},{"name":1195,"slug":1196,"type":13},{"slug":1199,"name":1199,"fn":1200,"description":1201,"org":1320,"tags":1321,"stars":20,"repoUrl":21,"updatedAt":1209},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1322,1323,1324],{"name":9,"slug":8,"type":13},{"name":1206,"slug":1207,"type":13},{"name":1123,"slug":30,"type":13},{"slug":1211,"name":1211,"fn":1212,"description":1213,"org":1326,"tags":1327,"stars":20,"repoUrl":21,"updatedAt":1227},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1328,1329,1330,1331,1332],{"name":9,"slug":8,"type":13},{"name":1218,"slug":1219,"type":13},{"name":1221,"slug":1222,"type":13},{"name":1224,"slug":1225,"type":13},{"name":1123,"slug":30,"type":13},18]