AppReviewFetch.Mcp
Model Context Protocol (MCP) server for AppReviewFetch. Enables AI assistants like GitHub Copilot and Claude to access app review data from App Store Connect and Google Play. Install globally with: dotnet tool install -g AppReviewFetch.Mcp
Ask AI about AppReviewFetch.Mcp
Powered by Claude Β· Grounded in docs
I know everything about AppReviewFetch.Mcp. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
AppReviewFetch
A .NET library, CLI tool, and MCP server for fetching app reviews from App Store Connect (with Google Play support in development).
π¦ Installation
CLI Tool (Recommended for most users)
dotnet tool install -g AppReviewFetch.Cli
Then run from anywhere:
arfetch
MCP Server (For AI Assistants)
Access your app reviews directly from GitHub Copilot, Claude, and other AI assistants:
dotnet tool install -g AppReviewFetch.Mcp
For configuration instructions, visit: https://github.com/praeclarum/AppReviewFetch/tree/main/AppReviewFetchMcp#readme
Library (For .NET Developers)
dotnet add package AppReviewFetch
Or add to your .csproj:
<PackageReference Include="AppReviewFetch" />
π Quick Start (CLI)
# Install globally
dotnet tool install -g AppReviewFetch.Cli
# Run the interactive REPL
arfetch
# Configure credentials
arfetch> setup
# List your apps
arfetch> list
# Fetch reviews
arfetch> fetch 123456789
Main CLI Commands
| Command | Aliases | Description |
|---|---|---|
setup | Configure App Store Connect credentials | |
list | l | List all apps (excludes hidden) |
fetch <query> [country] | f | Fetch reviews (supports app ID, bundle ID, or name) |
help | h, ? | Show all commands |
Query Support: Most commands accept flexible queries that can match:
- App ID (e.g.,
123456789) - Bundle/Package ID (e.g.,
com.example.app) - App Name (case-insensitive, partial match)
Examples:
fetch 123456789 # By app ID
fetch com.example.app # By bundle ID
fetch "My App Name" # By name
App Database
AppReviewFetch maintains a local database of apps at:
- Windows:
%LOCALAPPDATA%\AppReviewFetch\Apps.json - macOS/Linux:
~/.config/AppReviewFetch/Apps.json
This database:
- Caches apps from API calls (App Store, Google Play)
- Stores metadata like project URLs and notes
- Supports manual entries for stores that can't list apps (e.g., Google Play)
- Hides removed apps to keep listings clean
Use add-app to manually add apps, edit-app to set project URLs or hide apps, and delete-app to remove entries.
Setup
1. Get App Store Connect API Key
- Go to App Store Connect β Users and Access β Keys β App Store Connect API
- Generate or select an API key
- Note: Key ID, Issuer ID, and download the .p8 file
Required Role: Only Account Holders and Admins can generate API keys.
Required Key Access: When creating the key, assign one of these access levels:
- App Manager - Full app management access (recommended)
- Customer Support - Can view and respond to reviews
- Sales - Can view reviews and analytics
- Admin - Complete access to all features
Note: Developer, Marketing, and Finance roles do NOT have access to customer reviews.
2. Configure Credentials
Run arfetch setup or manually create:
Windows: %LOCALAPPDATA%\AppReviewFetch\Credentials.json
macOS/Linux: ~/.config/AppReviewFetch/Credentials.json
{
"appStoreConnect": {
"keyId": "YOUR_KEY_ID",
"issuerId": "YOUR_ISSUER_ID",
"privateKey": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
}
}
Library Usage
Add the package to your project:
dotnet add package AppReviewFetch
Fetch Reviews
using AppReviewFetch;
var service = new AppStoreConnectService();
var request = new ReviewRequest
{
SortOrder = ReviewSortOrder.NewestFirst,
Limit = 100,
Country = "US" // Optional
};
var response = await service.GetReviewsAsync("YOUR_APP_ID", request);
foreach (var review in response.Reviews)
{
Console.WriteLine($"{review.Rating}/5 - {review.Title}");
Console.WriteLine(review.Body);
if (review.DeveloperResponse != null)
Console.WriteLine($"Reply: {review.DeveloperResponse.Body}");
}
List Apps
var apps = await service.GetAppsAsync();
foreach (var app in apps.Apps)
{
Console.WriteLine($"{app.Name} ({app.Id})");
}
Pagination
var allReviews = new List<AppReview>();
var request = new ReviewRequest { Limit = 200 };
string? cursor = null;
do
{
request.Cursor = cursor;
var response = await service.GetReviewsAsync(appId, request);
allReviews.AddRange(response.Reviews);
cursor = response.Pagination.NextCursor;
} while (!string.IsNullOrEmpty(cursor));
Dependency Injection
services.AddHttpClient<IAppReviewService, AppStoreConnectService>();
API Reference
IAppReviewService
Task<ReviewPageResponse> GetReviewsAsync(string appId, ReviewRequest request)Task<AppListResponse> GetAppsAsync()
ReviewRequest
ReviewSortOrder SortOrder- NewestFirst, OldestFirst, HighestRatingFirst, LowestRatingFirst, MostHelpfulstring? Country- ISO 3166-1 alpha-2 country codestring? Cursor- Pagination cursorint Limit- Results per page (default: 100)
AppReview
string Id,int Rating,string? Title,string? Bodystring? ReviewerNickname,DateTimeOffset CreatedDate,string? TerritoryReviewResponse? DeveloperResponse
Exceptions
ApiErrorException- API errors (includes StatusCode, ErrorCode, ErrorDetail)AuthenticationException- JWT authentication issuesCredentialsException- Credentials file problems
Features
- β JWT authentication with automatic token generation
- β List all accessible apps
- β Pagination support
- β Multiple sort orders and territory filtering
- β Developer response support
- β Interface-based (extensible for other stores)
License
MIT
