# 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** 🚀
