Setup
Chosen→Installed→Verified
How will you use Geodesix?
You can add the others later.
Install
Copy loader<script src="https://cdn.geodesix.com/citations/latest/loader.js" data-gdx-key="ret_ulta" async></script>
Each placement's own snippet comes with the placement once a publisher accepts it.
Verify
Verified| Check | Detail | Result |
|---|---|---|
| Loader loaded | loader.js fetched and ran on ulta.com, with key ret_ulta | Pass |
| Placement element found | A data-gdx-placement element on ulta.com/p/nars-sheer-glow | Pass |
| Impression recorded | First shopper loaded the page 3 minutes ago | Pass |
| Viewable impression recorded | The citation scrolled into view 2 minutes ago | Pass |
4 of 4 passed, last checked 9 seconds ago.
Install
Copy bothhttps://ulta.com/p/nars-sheer-glow?irclickid={click_id}&subId1=geodesix-plc_c81f339&gdx_cit=cit_8394021a
<script src="https://cdn.geodesix.com/citations/latest/loader.js" data-gdx-key="ret_ulta" async></script>
Verify
Stop checking| Check | Detail | Result |
|---|---|---|
| Loader loaded | loader.js fetched and ran on the landing page | Checking |
| Placement read from the landing URL | Waiting for the loader | Not started |
| Arrival recorded | Waiting on the placement first | Not started |
| impact.com click recorded | Waiting on an arrival first | Not started |
0 of 4 answered, checking again every 15 seconds.
Install
Server
Copy URLhttps://mcp.geodesix.com/mcp
API key
RevealCopyRotategdx_live_••••••••••••4f2a
Search profile
Copyshopping_chatbot
Tools
search | Searches licensed articles by product, brand, or use case and returns passages with their source | Yes |
search_citations | Returns ready to quote sentences about a named product or brand, each with its publisher and URL | Yes |
fetch | Reads a full article a search already returned, for when a passage needs its surrounding sentence | No |
Attach the server
Copy bothAnthropic, Messages API
"mcp_servers": [{
"type": "url",
"url": "https://mcp.geodesix.com/mcp",
"name": "geodesix",
"authorization_token": "<your API key>",
"tool_configuration": {
"enabled": true,
"allowed_tools": ["search", "search_citations", "fetch"]
}
}]
OpenAI, Responses API
"tools": [{
"type": "mcp",
"server_label": "geodesix",
"server_url": "https://mcp.geodesix.com/mcp",
"require_approval": "never",
"allowed_tools": ["search", "search_citations", "fetch"],
"headers": {
"Authorization": "Bearer <your API key>",
"X-Search-Profile": "shopping_chatbot",
"X-Session-Id": "<your conversation id>"
}
}]
Instructions for the model
Copy instructionsYou have a "search" tool over licensed product reviews and a "search_citations" tool that returns quotable sentences about a named product or brand. Call "search" first, before recommending anything, searching the kind of product and the use case rather than the shopper's price limit. For each product you recommend, quote what a publisher wrote about it, copied verbatim, with the publisher named and the article linked. Call "fetch" when a passage is not a complete sentence. Never invent a quote and never attribute a claim about a brand, or general buying advice, to a specific product. Link every product you recommend to its page on ulta.com. Do not mention the tools, Geodesix, or how you found the reviews.
When calling "search", pass the query only. Never send api_key or session_id as arguments.
Anthropic only, add one line: When calling "search", pass this argument alongside the query: search_profile=shopping_chatbot.
Verify
Stop checking| Check | Detail | Result |
|---|---|---|
| Query received with your key | A call to search arrived 20 seconds ago, authenticated as Ulta Beauty | Pass |
| Search profile applied | shopping_chatbot read from the X-Search-Profile header | Pass |
| Licensed content returned | Waiting for a query that matches an article from a publisher you have switched on | Checking |
| Query counted | Waiting on content first | Not started |
2 of 4 answered, last checked 8 seconds ago, checking again every 15 seconds.
Opens once every check passes. Your progress is kept if you sign out.
Go to your dashboard