GoodRx MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GoodRx MCP ServerFind the best price for 20mg Atorvastatin near 90210"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@striderlabs/mcp-goodrx
A Model Context Protocol (MCP) connector for the GoodRx prescription discount service. Enables AI assistants to search for drug prices, find pharmacies, and retrieve discount coupons using GoodRx.
Overview
This MCP connector uses Playwright browser automation to interact with GoodRx, providing real-time prescription drug pricing and discount coupon data.
Related MCP server: Playwright MCP Server
Installation
npm install @striderlabs/mcp-goodrxOr install Playwright browsers after installation:
npx playwright install chromiumTools
goodrx_search_drug
Search for a prescription drug on GoodRx to find available pricing information, forms, and dosages.
Parameters:
drug_name(string, required) - Name of the drug (generic or brand name)dosage(string, optional) - Dosage form (e.g., "10mg", "500mg tablet")quantity(number, optional) - Number of pills/units
goodrx_get_prices
Get GoodRx discount prices for a drug at nearby pharmacies.
Parameters:
drug_name(string, required) - Name of the drugdosage(string, optional) - Dosage (e.g., "10mg")quantity(number, default: 30) - Number of pillszip_code(string, optional) - ZIP code to search nearform(string, optional) - Drug form (tablet, capsule, etc.)
goodrx_get_coupon
Get a GoodRx discount coupon for a specific drug at a pharmacy. Returns BIN, PCN, Group, and Member ID needed at checkout.
Parameters:
drug_name(string, required) - Name of the drugpharmacy(string, optional) - Pharmacy name (e.g., "CVS", "Walgreens")dosage(string, optional) - Dosage (e.g., "10mg")quantity(number, default: 30) - Number of pillszip_code(string, optional) - ZIP code for the pharmacy location
goodrx_find_pharmacies
Find pharmacies near a location that accept GoodRx discount coupons.
Parameters:
zip_code(string, required) - ZIP code to search nearpharmacy_name(string, optional) - Filter by pharmacy chain nameradius_miles(number, default: 10) - Search radius in miles
goodrx_compare_prices
Compare drug prices across multiple pharmacies to find the best deal using GoodRx.
Parameters:
drug_name(string, required) - Name of the drug to comparedosage(string, optional) - Dosage (e.g., "10mg")quantity(number, default: 30) - Number of pillszip_code(string, optional) - ZIP code for comparisonpharmacies(string[], optional) - Specific pharmacies to compare (e.g., ["CVS", "Walgreens", "Rite Aid"])form(string, optional) - Drug form (tablet, capsule, etc.)
Usage with Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"goodrx": {
"command": "npx",
"args": ["-y", "@striderlabs/mcp-goodrx"]
}
}
}Usage with MCP CLI
npx @striderlabs/mcp-goodrxExample Queries
Once connected, you can ask your AI assistant:
"What is the cheapest price for Lisinopril 10mg near 90210?"
"Find pharmacies near ZIP code 10001 that accept GoodRx"
"Get me a GoodRx coupon for Metformin at CVS"
"Compare prices for Atorvastatin 20mg at pharmacies near me"
Technical Details
Uses Playwright with headless Chromium for browser automation
Implements session management with singleton browser instance
Anti-detection measures including custom user agent and navigator property overrides
Graceful shutdown handling for SIGINT/SIGTERM
Requirements
Node.js >= 18
Playwright Chromium browser (installed via
npx playwright install chromium)
License
MIT
Author
Strider Labs hello@striderlabs.ai
Available Tools
5 toolsgoodrx_compare_pricesC
Compare drug prices across multiple pharmacies to find the best deal using GoodRx.
| Name | Required | Description | Default |
|---|---|---|---|
| drug_name | Yes | Name of the drug to compare | |
| dosage | No | Dosage (e.g., "10mg") | |
| quantity | No | Number of pills (default: 30) | |
| zip_code | No | ZIP code for comparison | |
| pharmacies | No | Specific pharmacies to compare (e.g., ["CVS", "Walgreens", "Rite Aid"]) | |
| form | No | Drug form (tablet, capsule, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions the tool uses GoodRx and compares prices, it doesn't describe important behavioral aspects: whether this requires authentication, rate limits, what the output format looks like, if it returns real-time or cached data, or any error conditions. For a tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that clearly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with the essential information. Every word earns its place in conveying the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a price comparison tool with 6 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't explain what the tool returns, how results are structured, whether authentication is needed, or how it differs from sibling tools. For a tool that presumably returns complex pharmacy pricing data, the description should provide more context about the output and behavioral characteristics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. It mentions comparing drug prices but doesn't elaborate on parameter relationships or usage patterns. With complete schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Compare drug prices across multiple pharmacies to find the best deal using GoodRx.' It specifies the action (compare), resource (drug prices), and scope (across multiple pharmacies). However, it doesn't explicitly differentiate from sibling tools like 'goodrx_get_prices' or 'goodrx_search_drug', which likely have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'goodrx_get_prices' and 'goodrx_search_drug' available, there's no indication of how this comparison tool differs or when it should be preferred over those options. The description only states what it does, not when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goodrx_find_pharmaciesB
Find pharmacies near a location that accept GoodRx discount coupons.
| Name | Required | Description | Default |
|---|---|---|---|
| zip_code | Yes | ZIP code to search near | |
| pharmacy_name | No | Filter by pharmacy chain name | |
| radius_miles | No | Search radius in miles (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool finds pharmacies that 'accept GoodRx discount coupons,' which implies a read-only search operation, but doesn't disclose other traits like rate limits, authentication needs, error handling, or what the return format looks like (e.g., list of pharmacies with details). For a tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary details. Every word earns its place, making it easy for an agent to quickly understand the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is minimally adequate. It states the purpose clearly but lacks behavioral details and usage guidelines. With no output schema, the description doesn't explain return values, leaving gaps in completeness. It meets the baseline for a simple search tool but could be more informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all three parameters (zip_code, pharmacy_name, radius_miles) with clear descriptions. The description adds no additional parameter semantics beyond implying location-based searching and GoodRx acceptance, which is already covered by the tool's purpose. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find pharmacies near a location that accept GoodRx discount coupons.' It specifies the action (find), resource (pharmacies), and key constraint (accept GoodRx coupons). However, it doesn't explicitly differentiate from sibling tools like 'goodrx_compare_prices' or 'goodrx_search_drug', which might also involve pharmacy-related searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'goodrx_compare_prices' or 'goodrx_get_prices', nor does it specify prerequisites, exclusions, or typical use cases. The agent must infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goodrx_get_couponA
Get a GoodRx discount coupon for a specific drug at a pharmacy. Returns BIN, PCN, Group, and Member ID needed at checkout.
| Name | Required | Description | Default |
|---|---|---|---|
| drug_name | Yes | Name of the drug | |
| pharmacy | No | Pharmacy name (e.g., "CVS", "Walgreens") | |
| dosage | No | Dosage (e.g., "10mg") | |
| quantity | No | Number of pills (default: 30) | |
| zip_code | No | ZIP code for the pharmacy location |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the return values (BIN, PCN, Group, and Member ID) but does not cover other critical aspects such as authentication requirements, rate limits, error conditions, or whether this is a read-only operation. For a tool with no annotations, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence and adds necessary detail about return values in the second. Both sentences earn their place by providing essential information without redundancy or fluff, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, no output schema, no annotations), the description is moderately complete. It covers the purpose and return values but lacks details on behavioral traits, error handling, and usage context. Without an output schema, it should ideally explain more about the return format, but it does specify the key fields needed at checkout, which is helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description does not add any additional meaning or context beyond what the schema provides, such as examples or constraints not in the schema. With high schema coverage, the baseline score of 3 is appropriate as the description does not compensate but also does not detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a GoodRx discount coupon') and the resource ('for a specific drug at a pharmacy'), making the purpose explicit. It distinguishes this tool from siblings like 'goodrx_compare_prices' or 'goodrx_get_prices' by focusing on coupon retrieval rather than price comparison or general price lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a discount coupon is needed, but it does not explicitly state when to use this tool versus alternatives like 'goodrx_compare_prices' or 'goodrx_get_prices'. No exclusions or prerequisites are mentioned, leaving the agent to infer context from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goodrx_get_pricesC
Get GoodRx discount prices for a drug at nearby pharmacies.
| Name | Required | Description | Default |
|---|---|---|---|
| drug_name | Yes | Name of the drug | |
| dosage | No | Dosage (e.g., "10mg") | |
| quantity | No | Number of pills (default: 30) | |
| zip_code | No | ZIP code to search near | |
| form | No | Drug form (tablet, capsule, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'Get GoodRx discount prices' but doesn't specify whether this is a read-only operation, if it requires authentication, rate limits, error handling, or what the output format looks like (especially since there's no output schema). For a tool with 5 parameters and no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence: 'Get GoodRx discount prices for a drug at nearby pharmacies.' It's front-loaded with the core purpose, avoids redundancy, and every word earns its place, making it highly concise and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no annotations, no output schema), the description is incomplete. It lacks behavioral details (e.g., read-only vs. mutation, error handling), usage guidelines relative to siblings, and output information. While the schema covers parameters well, the description doesn't add enough context to compensate for missing annotations and output schema, making it inadequate for full agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description implies parameters like 'drug' and 'nearby pharmacies' (mapping to 'drug_name' and 'zip_code'), but it doesn't add meaningful semantics beyond what the schema already provides. With 100% schema description coverage, the baseline is 3, as the schema adequately documents all parameters (e.g., 'drug_name', 'dosage', 'quantity', 'zip_code', 'form'). The description doesn't compensate with additional context like parameter interactions or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get GoodRx discount prices for a drug at nearby pharmacies.' It specifies the verb ('Get'), resource ('GoodRx discount prices'), and scope ('for a drug at nearby pharmacies'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from siblings like 'goodrx_compare_prices' or 'goodrx_find_pharmacies', which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its siblings (e.g., 'goodrx_compare_prices', 'goodrx_find_pharmacies', 'goodrx_get_coupon', 'goodrx_search_drug'). It doesn't mention prerequisites, alternatives, or exclusions, leaving the agent to infer usage based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goodrx_search_drugB
Search for a prescription drug on GoodRx to find available pricing information, forms, and dosages.
| Name | Required | Description | Default |
|---|---|---|---|
| drug_name | Yes | Name of the drug to search for (generic or brand name) | |
| dosage | No | Dosage form (e.g., "10mg", "500mg tablet") | |
| quantity | No | Number of pills/units |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool searches for pricing information, forms, and dosages, but lacks details on rate limits, authentication needs, error handling, or what specific data is returned (e.g., whether it includes pharmacy locations or coupon details). This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that efficiently conveys the tool's purpose without unnecessary words. It is front-loaded with the main action and resource, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (search with 3 parameters) and no annotations or output schema, the description is minimally adequate. It covers the basic purpose but lacks details on behavioral traits, usage context, and return values, which are important for a search tool in a domain with multiple sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting all three parameters. The description adds no additional semantic meaning beyond the schema, such as examples of drug names or how dosage and quantity affect results. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('search for a prescription drug') and the resource ('GoodRx'), specifying the purpose to find pricing information, forms, and dosages. However, it doesn't explicitly differentiate from sibling tools like 'goodrx_compare_prices' or 'goodrx_get_prices', which might have overlapping functionality, so it doesn't achieve full distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'goodrx_compare_prices' or 'goodrx_get_prices'. It states what the tool does but offers no context on prerequisites, exclusions, or comparative use cases, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v1.0.0- First observed
goodrx_compare_prices - First observed
goodrx_find_pharmacies - First observed
goodrx_get_coupon - First observed
goodrx_get_prices - First observed
goodrx_search_drug
TDQS
Each tool has a clearly distinct purpose: compare_prices focuses on price comparison across pharmacies, find_pharmacies locates nearby pharmacies, get_coupon retrieves discount coupon details, get_prices provides pricing at nearby pharmacies, and search_drug searches for drug information. There is no overlap or ambiguity between these functions.
All tools follow a consistent 'goodrx_verb_noun' pattern (e.g., goodrx_compare_prices, goodrx_find_pharmacies), using snake_case and starting with the server prefix. This uniformity makes the tool set predictable and easy to understand.
With 5 tools, this server is well-scoped for its purpose of accessing GoodRx drug pricing and pharmacy services. Each tool serves a specific, necessary function without redundancy, making the count appropriate and manageable.
The tool set covers core GoodRx workflows: searching drugs, finding pharmacies, getting prices, comparing prices, and obtaining coupons. A minor gap is the lack of tools for managing user accounts or prescription history, but the essential operations for price comparison and coupon retrieval are fully covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to iā¦
AI-powered browser automation ā navigate, click, fill forms, and extract data from any website.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to automate web browsers through Playwright, providing capabilities for navigation, content extraction, form filling, screenshot capture, and JavaScript execution. Supports multiple browser engines with comprehensive error handling and security features.1-
- AlicenseNot gradedqualityDmaintenanceProvides browser automation capabilities using Playwright, enabling users to navigate websites, extract content, take screenshots, and interact with web pages through natural language prompts.15MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI models to find the best online deals by browsing and interacting with multiple shopping platforms like Amazon and eBay across various regions. It uses Playwright to automate searches and retrieve product information from compatible e-commerce and deal-tracking websites.273MIT
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to perform browser automation tasks including web scraping, taking screenshots, and executing JavaScript using Playwright. It facilitates real-time interaction with web pages and the generation of automated test code.58MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/markswendsen-code/mcp-goodrx'
If you have feedback or need assistance with the MCP directory API, please join our Discord server