appstore-rejections-mcp
# appstore-rejections-mcp
> An MCP (Model Context Protocol) server that gives AI assistants access to a curated database of Apple App Store rejection reasons, solutions, and real-world cases.
Built on a database of **48 rejection reasons**, **51 solutions**, **554 real-world cases**, and all **130 Apple Review Guideline subsections**.
**[Website](https://fixmyrejection.com) • [npm](https://npmjs.com/package/appstore-rejections-mcp) • [GitHub](https://github.com/RobertoJoseph/appstore-rejections-mcp) • [Contributing](./CONTRIBUTING.md)**
## Tools
| Tool | Description |
|------|-------------|
| `search_rejections` | Semantic search — paste Apple's rejection message or describe the issue |
| `get_rejection_reason` | Full details for a specific rejection reason (Apple's message, tags, categories) |
| `get_solutions` | Step-by-step fixes with code examples, difficulty, and success rates |
| `get_guideline` | Look up Apple Review Guidelines by number (e.g. `2.1`, `4.3`, `5.1.1`) |
| `list_common_rejections` | Top rejection reasons ranked by frequency |
| `get_cases` | Real-world cases filtered by reason, app category, or appeal status |
## Installation
### Claude Code (Recommended - Easiest)
Run this command in your terminal:
```bash
claude mcp add --transport stdio appstore-rejections -- npx -y appstore-rejections-mcp
```
That's it! Reload Claude Code and the MCP server will auto-connect.
### Cursor
Add to your Cursor config file:
- **macOS/Linux**: `~/.cursor/mcp.json`
- **Windows**: `%APPDATA%\Cursor\mcp.json`
```json
{
"mcpServers": {
"appstore-rejections": {
"command": "npx",
"args": ["-y", "appstore-rejections-mcp"]
}
}
}
```
Save the file, restart Cursor, and it will auto-connect.
### Claude Desktop (Legacy - Global)
Add to your Claude Desktop config:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"appstore-rejections": {
"command": "npx",
"args": ["-y", "appstore-rejections-mcp"]
}
}
}
```
## Usage Examples
Once connected, your AI assistant can:
**Search for a rejection reason:**
> "My app was rejected for guideline 4.3, what does that mean?"
**Get solutions:**
> "How do I fix an App Store rejection for missing privacy policy?"
**Review your app before submission:**
> "Review my iOS app codebase for potential App Store rejections"
**Look up guidelines:**
> "What does Apple guideline 5.1.1 say?"
**Find real-world cases:**
> "Show me cases where Finance apps were rejected and the developer appealed"
## Data Coverage
- **48** documented rejection reasons with Apple's actual message templates
- **51** solutions with implementation steps and code examples
- **554** real-world cases sourced from Reddit, Stack Overflow, Apple Forums, and developer blogs
- **130** Apple Review Guideline subsections across all 5 sections
- **50** app categories tracked
- Semantic search powered by pgvector embeddings
## Requirements
- Node.js >= 18
## Quick Start
### For Claude Code Users
```bash
claude mcp add --transport stdio appstore-rejections -- npx -y appstore-rejections-mcp
```
Then in Claude Code, ask:
> "Check my iOS app for potential App Store rejections"
### For Everyone Else
See [Installation](#installation) section above for Cursor, Claude Desktop, and other setup methods.
---
## Real-World Example
**User asks Claude Code:**
> "My iOS app was rejected for guideline 4.3. What does that mean and how do I fix it?"
**Claude uses the MCP tools to:**
1. Look up guideline 4.3
2. Find related rejection reasons
3. Get step-by-step solutions
4. Show real cases where developers fixed similar issues
5. Provide code examples and best practices
---
## How It Works
The MCP server connects your AI assistant to:
- **48 Rejection Reasons** - Apple's actual rejection messages and patterns
- **51 Solutions** - Step-by-step fixes with difficulty ratings
- **554 Real Cases** - Community experiences and appeals
- **130 Guidelines** - Full Apple Review Guideline subsections
- **Semantic Search** - Powered by vector embeddings for smart matching
---
## For Developers
### Building from Source
```bash
git clone https://github.com/RobertoJoseph/appstore-rejections-mcp.git
cd appstore-rejections-mcp
npm install
npm run build
```
### Environment Variables (Optional)
For custom Supabase instance:
```bash
SUPABASE_URL=your-url
SUPABASE_ANON_KEY=your-key
```
See [CONTRIBUTING.md](./CONTRIBUTING.md) for more details.
---
## Community
- **Found a bug?** [Open an issue](https://github.com/RobertoJoseph/appstore-rejections-mcp/issues)
- **Have an idea?** [Start a discussion](https://github.com/RobertoJoseph/appstore-rejections-mcp/discussions)
- **Want to contribute?** See [CONTRIBUTING.md](./CONTRIBUTING.md)
- **Questions?** Email: roberto.josephselim@gmail.com
---
## Changelog
**v1.0.2** - Cleaned up README, clearer installation instructions
**v1.0.1** - Fixed invalid API key error
**v1.0.0** - Initial release
---
## Built By
**Roberto Joseph** - [LinkedIn](https://www.linkedin.com/in/roberto-joseph-b69ba11b1/) • [Twitter](https://twitter.com/robertojosephr) • [TikTok](https://www.tiktok.com/@techwruby)
---
## License
MIT - See [LICENSE](./LICENSE) file for details
---
**Made with ❤️ for iOS developers everywhere** 🚀
TDQS
Scored across 6 tools
Each tool has a clear primary purpose, and the descriptions are specific enough to avoid major selection errors. Some overlap exists because search_rejections also returns solutions, which could make get_solutions seem redundant, and list_common_rejections overlaps slightly with search_rejections.
Tool names consistently follow a verb_noun snake_case pattern using get, search, and list as actions. This is predictable and makes the toolset easy for an agent to navigate.
Six tools is well-scoped for a specialized App Store rejection knowledge base. There are no redundant tools, and the count feels appropriate for the domain's read-only reference purpose.
The toolset covers the full reference workflow: searching rejection reasons, retrieving detailed reasons, accessing solutions, looking up guidelines, listing common rejections, and exploring real cases. No significant dead ends or missing core operations are apparent for a read-only reference server.