Mağaza MCP
One MCP server that manages both App Store Connect and Google Play at once — including cross-store comparisons — plus full API access to all 1,440 operations of both stores.
Cross-store tools (both stores required):
magaza__genel_bakislists every app across both stores and pairs the iOS/Android versions of the same product;magaza__abonelik_karsilastircompares the same subscription's product IDs, durations, and prices in a given country (auto-converting country codes);magaza__iap_teshisdiagnoses "paid but no premium" issues and can verify a Play purchase token.App Store Connect (read): list apps, versions and their review status, TestFlight builds and beta groups, customer reviews (filter by rating, country, unanswered), subscription groups and prices per country, one-time IAPs, and download sales reports as TSV (daily/weekly/monthly/yearly, multiple report types).
App Store Connect (write ✎): reply to reviews; update the in-preparation version's release notes, description, keywords, and promotional text.
Google Play (read): list apps (via the Reporting API), release channels with rollout percentages, recent reviews (translatable), subscriptions and base plans, per-country base-plan prices plus rest-of-world fallback, one-time products (new and legacy models), purchase-token verification, refunded/cancelled purchases, and Android vitals crash rate.
Google Play (write ✎): post a public, irreversible developer reply to a review (max 350 characters).
Full API access: search any endpoint across both APIs (
magaza__endpoint_ara), inspect required request bodies (magaza__sema), and execute any operation (magaza__cagir) — 1,440 operations total, loaded at ~4,000 tokens.Safety controls: write operations need
onayla=true, enforced server-side;--salt-okunurread-only mode removes write tools entirely (27 → 24 tools); tool prefixes and per-store loading prevent mixing the two stores; keys stay in the Keychain and no telemetry is sent.
Provides tools for interacting with App Store Connect, including listing apps, subscriptions, in-app purchases, TestFlight builds, App Store versions, customer reviews, sales reports, and updating store metadata or developer review responses.
Provides tools for interacting with Google Play, including listing apps, subscriptions, one-time products, release channels, crash rates, user reviews, validating purchase tokens, checking refunds, and responding to reviews.
Click on "Deploy 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., "@Mağaza MCPNota Defteri aboneliği App Store'da ve Play'de Türkiye'de kaç para?"
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.
Mağaza MCP
App Store Connect and Google Play, in one MCP server. Let your AI assistant manage both stores.
You don't type anything into a terminal to install this. Drop this line on your AI assistant, it handles the rest:
https://github.com/tunaarikaya/magaza-mcp — install this, read AGENTS.mdYou: How much is Nota Defteri's monthly subscription on App Store vs. Play in Turkey?
Assistant: ₺129.99 on the App Store, ₺99.99 on Play. Play is noticeably cheaper — if you want the same price in both stores, you need to update the base plan on Play.
No other MCP server can answer that in a single call, because they all look at
one store. magaza-mcp sees both at once.
No server sits in the middle: the package runs on your own machine, talks directly to Apple and Google, and your keys never leave your Keychain.
📚 Table of contents
The difference from single-store servers | |
Have your assistant do it — you don't type commands | |
If you're not using an assistant | |
No — here's why | |
Example prompts | |
Is your Apple account at risk? | |
Full list of all 41 tools | |
1,440 operations, ~9,000 tokens | |
What Apple and Google require | |
Keys, approval gates, telemetry | |
Common errors |
Related MCP server: mcp-appstore-connect
🎯 Why this exists
Almost every MCP server on the market covers a single store. If you want both, you install two separate servers, juggle two separate tool sets, and manually stitch together any question that needs a comparison.
Question | With single-store servers | With |
"How much is this subscription in both stores?" | Two separate queries, manual comparison | One call, side by side |
"User paid but didn't get premium, what's wrong?" | You figure out which store first | Scans both at once, ranks findings |
"Where is what published?" | Two lists, manual matching | One list with iOS/Android pairs already matched |
The real win isn't more tools: it's tools that can query both stores in the same call, which is only possible once both are in one server.
⚡ Setup
Tell your assistant (Claude Code, Antigravity, Cursor, Codex, Gemini CLI…):
https://github.com/tunaarikaya/magaza-mcp — install this, read AGENTS.mdThe assistant reads AGENTS.md and handles the entire setup. All you do is answer its questions:
You › https://github.com/tunaarikaya/magaza-mcp — install this, read AGENTS.md
Assistant › Looking for your keys on this machine...
Found two keys:
App Store : ~/Downloads/AuthKey_ABC123DEFG.p8 (Key ID ABC123DEFG)
Play : ~/.config/play/account.json (publish@project.iam...)
Want me to use these? If there's another file, tell me the path,
or copy the key and paste it — either works.
You › yes, use them
Assistant › I need the Issuer ID for App Store. It's the UUID above the key
list on App Store Connect → Users and Access → Integrations.
You › 69a6de70-0000-0000-0000-000000000000
Assistant › ✓ App Store Connect connected — 4 apps found
✓ Google Play connected — 3 apps found
✓ Registered in Claude Code and Antigravity settings
Restart Claude Code, then ask:
"List my apps across both stores"If it can't find your key, it will ask you how to proceed: give it the file path, copy the key to your clipboard, or — if you don't have a key yet — it'll walk you through getting one step by step.
The assistant never sees the contents of your key. It runs the setup,
but the commands take the file's path, read its contents themselves, and
write it straight into the Keychain. Even when you paste the key via
clipboard (pbpaste | …), the content flows through a pipe and never enters
the assistant's context. AGENTS.md tells the assistant this explicitly.
After setup, restart any open applications — MCP servers only load at startup.
Client | Config file |
Claude Code |
|
Claude Desktop |
|
Antigravity (IDE + CLI) |
|
Cursor |
|
Windsurf |
|
Codex |
|
Your existing config is left untouched — only the magaza-mcp entry is
added or updated, a .magaza-mcp-yedek backup is taken before every write,
and the write itself is atomic.
🧑💻 Manual setup
If you're not using an assistant, a wizard does the same job:
npx magaza-mcp kur Mağaza MCP setup
App Store Connect + Google Play, in one setup
1. Which stores should we connect?
App Store Connect (iOS / macOS)? [Y/n] y
Google Play (Android)? [Y/n] y
2. App Store Connect key
Key ID: ABC123DEFG
Issuer ID: 00000000-0000-0000-0000-000000000000
Path to .p8 file: ~/Downloads/AuthKey_ABC123DEFG.p8
Connecting to Apple... ✓ 4 apps found
✓ Key saved (macOS Keychain)
3. Google Play service account
Path to service account JSON: ~/.config/play/account.json
Connecting to Google... ✓ 3 apps found
✓ Key saved (macOS Keychain)
4. Which clients should it be installed to?
Claude Code? [Y/n] y
Antigravity (IDE + CLI)? [Y/n] y
Cursor? [y/N] n
Setup complete.# | Question | Note |
1 | Which stores? | App Store, Play, or both |
2 | App Store key | Key ID, Issuer ID, |
3 | Play service account | Path to the JSON key — also verified against Google |
4 | Which clients? | Clients detected on your machine come pre-checked |
5 | Read-only? | No by default |
Keys are never written to the config file. On macOS they're saved to the
Keychain; the config file only gets which stores are enabled (MAGAZALAR).
On systems without Keychain access, it falls back to a file with 0600
permissions.
npx magaza-mcp tara # Search the machine for .p8 and service account keys
npx magaza-mcp anahtar ... # Verify a key and write it to the vault (below)
npx magaza-mcp kaydet # Register the server in clients' configs
npx magaza-mcp durum # Show what's connected (--json for machine-readable)
npx magaza-mcp araclar # List installed tools (✎ = can modify data)
npx magaza-mcp kur # Manual setup wizard
npx magaza-mcp surum # Print version
npx magaza-mcp yardim # HelpRegistering a key (the command-line equivalent of the wizard's Q&A step):
npx magaza-mcp anahtar --apple-p8 ~/Downloads/AuthKey_ABC123DEFG.p8 \
--issuer-id 69a6de70-0000-0000-0000-000000000000
npx magaza-mcp anahtar --play-json ~/.config/play/account.json
pbpaste | npx magaza-mcp anahtar --play-json - # from clipboard, no file
npx magaza-mcp anahtar --sil appstore # remove from the vaultIf --key-id isn't given, it's read from the filename. A key is never
written to the vault without being verified against Apple/Google with a real
request; if verification fails, the existing key in the vault is left
untouched.
🧩 Do the two stores mix up?
No — and that's not an accident, it's the design itself.
1. Tool names are separated by prefix. Every tool going to App Store
starts with appstore__, every tool going to Play starts with play__. A
tool never talks to both APIs. There's no shared name, so there's nothing to
mix up.
2. Tools for the store you didn't pick are never loaded. On startup, the
server reads the MAGAZALAR variable and builds the tool list from it — the
other store's tools aren't even loaded into memory, aren't shown to the
model, and cost zero tokens.
Setup | Tools loaded |
Both stores | 41 |
App Store only | 22 |
Play only | 19 |
Read-only (both stores) | 27 |
3. Cross-store tools only exist when both stores are enabled. In a single-store setup they're never created at all — they'd have no meaning.
4. The dispatch tools know their scope too. The magaza parameter on
magaza__endpoint_ara and magaza__cagir is an enum that only accepts the
stores you've set up. If you only installed Play, the model can't make a call
with magaza: "appstore" — the schema doesn't allow it.
💬 What you can ask
The app names in the examples are made up; you'd use your own app's name.
Both stores at once
"List my apps across both stores — where's each one published?"
"What's Nota Defteri's monthly subscription on App Store vs. Play in Turkey? Is there a difference?"
"A user says they paid but didn't get premium. Check the purchase setup in both stores."
App Store
"Which of my versions is stuck in review?"
"Did yesterday's TestFlight build finish processing?"
"Summarize the 1- and 2-star reviews from the last week — what's the most common complaint?"
"Update the 'What's New' text for the version in preparation."
Google Play
"Which version is on the production channel and what percentage of users does it reach?"
"Has the crash rate gone up over the last 14 days?"
"Is this purchase token valid, is the subscription still active?"
"Draft a polite reply to this review, but show me first."
🚨 Account health
Apple terminates developer accounts every year for spam, copycat apps and review manipulation — and many developers find out only when the email arrives. Most of them never knew they were doing anything wrong: the same screenshots in five apps, "Instagram" in the keywords, someone else's copyright left over from a template.
appstore__hesap_sagligi scans the whole account and scores the risk from
0 to 100:
You › Is my developer account safe?
Assistant › ACCOUNT RISK: 72/100 🔴 HIGH
Clones / spam (4.3) ██████████ critical (3)
Metadata & trademarks (2.3/5.2) █████░░░░░ high (4)
Reviews & money (5.6/3.1) ██░░░░░░░░ low (2)
Review history & account ██████░░░░ medium (3)
1. [CRITICAL] Same screenshots in 6 apps
2. [HIGH] Photo Pro: "instagram" in the keywords
3. [HIGH] 3 apps carry someone else's copyright
…Section | What it looks for |
Clones / spam | Identical screenshots across apps, near-identical names and descriptions, |
Metadata & trademarks | Brand names (Apple, Instagram, ChatGPT…) in names and keywords, "best / #1 / free" in the name, keyword stuffing, Android mentions, missing privacy or support URL, media downloaders, fake-function apps |
Reviews & money | Scam / refund complaints, 5-star bursts, copy-paste reviews, misleading review replies, refund rate, apps with no downloads, overpriced weekly subscriptions, rejected IAPs |
Review history & account | Rejections, reviews stuck for days, apps Apple removed, apps not updated in 3+ years, EU trader status, missing declarations (content rights, encryption, demo account, review notes, age rating), too many admins |
Every finding comes with the Apple guideline, why it's risky and the steps to fix it.
Parameter | What it does |
| Scan a single app (Apple id, bundle ID or name). Clone detection needs the whole account. |
| Only these sections: |
| All languages and 1,000 reviews per app (slower). Default: primary language + en-US, 200 reviews |
| Vendor number — adds the refund rate and 12-month download checks |
Fixing. Findings marked automatic can be fixed with
appstore__hesap_duzelt. It always shows the change first and only writes
with onayla=true:
appstore__hesap_duzelt(bulgular: ["anahtar-marka:1234567:en-US"])
→ preview: keywords "photo,instagram,edit" → "photo,edit"
appstore__hesap_duzelt(bulgular: ["anahtar-marka:1234567:en-US"], onayla: true)
→ appliedFindings that need a value (privacy URL, copyright, demo account) take it
through degerler. If there's no editable version, it tells you instead of
creating one. Heavy moves — pulling an app from sale, demoting an admin —
are only explained, never done.
Quiet fixes. The advice never pushes you to knock on Apple's door: issues are fixed on your side, ideally in your next regular update; reporting reviews, messaging App Review unprompted or volunteering explanations is not recommended. If Apple asks, answer briefly and honestly. Every finding comes with a "don't" list — the reflexes that draw attention.
What it can't see. The API doesn't expose Apple's internal flags, rejection reasons or Resolution Center messages, or links to other accounts (same device, card or freelancer — the most common unexplained termination). So the tool reports risk signals, not a verdict, and says what it couldn't check.
Ask things like:
"Is my developer account safe?"
"Why is my review taking so long?"
"Fix the keyword problems you found, but show me first."
🧰 Tools
The prefix tells you which store a tool goes to. Tools marked ✎ modify
data and won't run without onayla=true.
These tools only load when both stores are connected.
Tool | What it does |
| Collects apps from both stores into one list; puts the iOS/Android pair of the same product side by side, and separates out apps that only exist in one store. |
| Compares the same app's subscriptions across both stores: product IDs, durations, and prices in the requested country. Converts the country code to whichever format each store expects. |
| Diagnoses "paid but no premium" issues: are the products live, do they have a price in that country, is the plan open to new subscribers; if you give it a Play purchase token it verifies that too, and writes up its findings as a list. |
Tool | What it does |
| Lists the apps on the account: name, bundle ID, SKU, primary language, and the |
| Shows an app's App Store versions and their status (in preparation, in review, live, rejected). |
| Lists TestFlight builds, their processing status, and expiry dates. |
| Fetches customer reviews, newest first; filterable by rating and country, or only the ones without a reply yet. Shows the existing developer response if there is one. |
| Writes a developer response to a review (published after Apple's moderation). |
| Lists subscription groups and the subscriptions in them: product ID, duration, status. |
| Fetches a subscription's customer price and developer proceeds, country by country. |
| Lists one-time in-app purchase products. |
| Shows TestFlight beta groups, how many testers are in each, public invite links, and quotas. |
| Updates the store text of the version in preparation: release notes, description, keywords, promotional text. |
| Downloads the sales/download report as TSV: daily, weekly, monthly, or yearly; sales, pre-order, installs, subscriptions, subscription events, subscribers, and offer code reports. |
| Sets a subscription's price in every country at once: give one price (e.g. USA 9.99), Apple's equalization table fills in all ~175 countries and they're written in a single request. Add country-specific prices on top ( |
| Regional pricing suggestion, writes nothing: starts from Apple's equalized price and applies a softened discount based on each country's purchasing power (World Bank). Never raises a price, never cuts more than half, leaves rich countries alone. The output plugs straight into |
| Sets a one-time purchase's price from a single base country; Apple fills in the rest. |
| Makes a subscription available in every country (or the ones you list) in one request. |
| Creates a subscription from scratch behind one approval: group → subscription → localized names → availability → prices in all countries. |
| Reads or fills in the age rating questionnaire (Apple's 2025 questions). Finds the editable app info by itself; only the answers you give change. |
| Scans the whole developer account for termination, removal and long-review risk: a 0–100 score, findings tied to Apple guidelines, why each one is risky and how to fix it. See Account health. |
| Fixes findings from |
Tool | What it does |
| Lists the apps the service account can access; this is where you get the package name other tools need. |
| Shows release channels (internal, alpha, beta, production) and the versions on each, with user rollout percentages. Requires the service account to have release-management permission. |
| Fetches user reviews, translating them if asked. The Play API only returns roughly the last week. |
| Writes a developer response to a review (350 characters max). |
| Lists subscriptions and their base plans: duration, status, number of priced countries. Includes archived ones if asked. |
| Fetches a base plan's prices country by country, and whether it's open to new subscribers; also checks the "rest of world" fallback price for countries not listed individually. |
| Lists one-time products; tries both the new ( |
| Verifies a purchase token: subscription status, acknowledgment status, expiry date, whether it's a test purchase. |
| Lists cancelled, refunded, or charged-back purchases; turns the refund reason and source into something readable. Google only returns the last 30 days. |
| Android vitals: crash and ANR rates (including the user-perceived rates Play uses for its bad-behavior thresholds), whether a threshold is exceeded, and the most frequent crash clusters with stack traces. Can be narrowed to one version code. |
| Uploads an AAB/APK and releases it to a track in one approval: upload → assign to track → release notes → commit. Give a percentage for a staged rollout (e.g. production 10%). If anything fails, nothing is committed. |
| Manages a track: change the rollout %, halt, resume, complete, promote a release to another track (internal → production), or update only the release notes. The preview shows the track before and after. |
| Reads or updates store listing text (title, short and full description, video) for every language in one edit. |
| Uploads screenshots, the icon, or the feature graphic, optionally replacing the existing ones. |
| Sets a base plan's price in every country at once from a USD price (Google's own conversion), with optional country-specific prices on top, or changes only the countries you list. |
| Regional pricing suggestion for Play, writes nothing: same purchasing-power logic as the App Store version, rounded to natural-looking local prices. |
Tool | What it does |
| Searches for an endpoint across all connected stores' APIs; returns the operation name, HTTP method, path, and parameters. |
| Runs the operation you found. Fills in path parameters automatically; operations that modify data won't run without |
| Shows what an operation's request body should look like; used before POST/PATCH calls. |
magaza__cagir is marked ✎ here because it can also run operations that
modify data. In npx magaza-mcp araclar output it doesn't show ✎ though:
since it's also the single gateway to every read endpoint in the catalog, it
isn't dropped from the list in read-only mode — only write operations through
it are blocked.
🌐 Full API access
The curated tools cover most day-to-day work. For everything else, the server carries the entire API surface of both stores:
Source | Operations |
App Store Connect API v4.5 | 1,270 |
Android Publisher API v3 | 145 |
Play Developer Reporting API v1beta1 | 25 |
Total | 1,440 |
When the curated tools aren't enough, the model first finds the operation it
needs with magaza__endpoint_ara, then runs it with magaza__cagir.
Why aren't they all separate tools?
MCP tool definitions get loaded into context on every request — the installed tool list is paid for again on every message, even if you don't use any of them.
Tools | Paid on every message | |
magaza-mcp | 41 | ~9,000 tokens |
If all were separate tools | 1,440 | ~210,000 tokens |
Nothing is locked away: all 1,440 operations are reachable, but the ones you don't use cost nothing. There's no "should I turn this feature on, it costs tokens" setting either — there's nothing to turn on.
The catalogs are generated from Apple's and Google's official
specifications: Apple's published App Store Connect OpenAPI file, and
Google's Android Publisher and Play Developer Reporting discovery documents.
There's no hand-written endpoint list. The 159 operations Apple marks as
deprecated aren't dropped from the catalog — some of them are the only way to
reach that capability — but their summaries start with [ESKİMİŞ]
(deprecated) and are pushed down in search results.
🔑 Required permissions
App Store Connect — The App Manager role is enough when creating the key; Admin isn't required. Exceptions: user/access management endpoints and some analytics reports need higher privileges.
Google Play — Both steps are required:
The service account must be invited from Play Console → Users and permissions and granted access to the relevant apps.
The Android Publisher API and Play Developer Reporting API must be enabled on the Cloud project. App listing and crash metrics come from the Reporting API, so the second one is genuinely required too.
Contract, tax, and banking informationcannot be read with any API key. Apple never exposes this data to the API at all; only the Account Holder can see it in the dashboard.
🔒 Security
Keys live in the Keychain. The Apple
.p8and Google service account JSON are stored in the macOS Keychain; never written to config files, environment variables, or the repo.The assistant never sees the key, even when it runs the setup. The
anahtarcommand takes the file's path, reads the content itself, and writes it straight to the vault; a key given via clipboard also flows through a pipe. The key's content never appears in any command's output —durumonly prints the last four characters of the Key ID,taraonly prints file paths.Operations that modify data require approval. Write tools don't run on the first call: they return what would happen and the expected request body; the operation only runs once the user approves and it's called again with
onayla=true. This is enforced server-side — it doesn't depend on the client's approval UI.Read-only mode.
--salt-okunur(orSALT_OKUNUR=1) removes every write-capable tool from the list entirely: the model can't see them or call them. 41 tools become 27.magaza__cagirstays in the list because it's also the single gateway for read endpoints in the catalog — but it refuses write operations when read-only mode is on.Path parameters are validated. IDs passed to tools are encoded before entering a URL; path-traversal attempts like
.and..are rejected. For absolute URLs the target host is validated, so no request can carry a token to anywhere other than Apple or Google.Clients can see which tools modify data. The tool list ships with MCP
annotations(readOnlyHint,destructiveHint).Package provenance is verifiable. Every version published to npm is built inside GitHub Actions, and npm generates a Sigstore-signed provenance attestation: the Provenance section on the npm page shows which commit in this repo the tarball you downloaded was built from. No publish token is stored in the repo; GitHub issues a short-lived, signed identity on every release (trusted publishing), so there's no publish key to steal either.
No telemetry. No analytics, error reports, or usage data are sent. Network traffic only goes to
api.appstoreconnect.apple.com,androidpublisher.googleapis.com,playdeveloperreporting.googleapis.com, andoauth2.googleapis.comfor tokens. The one exception is the twofiyat_analizitools, which read public purchasing-power figures fromapi.worldbank.org(no key, nothing of yours is sent). There's no server in the middle; data flows directly between your machine and Apple/Google.
🩺 Troubleshooting
The Key ID, Issuer ID, and .p8 file might not belong together — all three
need to be from the same key. If they match, check the system clock: the
signed JWT lives 20 minutes, and a token produced on a machine with a drifted
clock gets rejected by Apple. Also make sure the .p8 file is an App Store
Connect API key — StoreKit or push keys don't work here.
The key's role isn't sufficient for that operation. App Manager covers most things; user management and some reports need more.
Worth knowing upfront: contract, tax, and banking information can't be read with any API key. A 403 here isn't a misconfiguration, it can't be fixed.
The app has moved to Google's new product model; the legacy inappproducts
endpoint is now closed and oneTimeProducts should be used instead. The
play__urunler tool handles this itself: it tries the new endpoint first,
falls back to the legacy one if needed, and tells you in the output which
model it used.
The service account may not have been invited to the app in Play Console. After inviting it, permissions can take a few minutes to propagate. If the invite is already in place, verify that Android Publisher API and Play Developer Reporting API are enabled on the Cloud project.
Because the Android Publisher API has no app-listing endpoint — Google
never published one. Since no Publisher call can be made without knowing the
package name, the list is pulled from the Play Developer Reporting API's
apps:search endpoint instead. That's why the Reporting API needs to be
enabled not just for crash metrics, but for basic usage too.
On Play, channel information can only be read from within an "edit session." The read tools open this session themselves, read from it, and leave it without committing — so it creates no changes — but it does mean two extra HTTP calls.
🛠 Development
git clone https://github.com/tunaarikaya/magaza-mcp.git
cd magaza-mcp
npm install
npm run build # Compile TypeScript
npm run kontrol # Type-check (tsc --noEmit)
npm run dev # Compile in watch modeTo regenerate the tool catalogs from the specs:
node scripts/uret-katalog.mjsThis reads the three spec files under spec/ and rewrites the catalogs under
src/katalog/. The operation list is never hand-edited.
🤝 Similar projects
There are good projects in this space that came before this one. If your needs are limited to a single store, we genuinely recommend looking at them:
Heimdall — Covers the entire App Store Connect API with 890 tools, with a profile system that lets you narrow the tool set down. The deepest project in this space if you're only interested in iOS.
app-store-connect-mcp-server — The first one. Established the idea of putting App Store Connect behind an MCP server; everyone who came after owes something to it.
google-play-developer-mcp — A comprehensive, mature server on the Play side. More than enough if you're only publishing on Android.
Our difference: all of these look at a single store. magaza-mcp combines
both in one setup and offers tools that can compare both stores in the same
call — exactly what a single-store server can't do.
📄 License
MIT — see LICENSE for details. See THIRD-PARTY-NOTICES.md for third-party sources.
App Store, TestFlight, App Store Connect, Google Play, and Play Console are trademarks of their respective owners. This is an independent open-source project; it is not affiliated with, endorsed, sponsored, or supported by Apple Inc. or Google LLC.
Available Tools
27 toolsappstore__abonelik_fiyatlariARead-only
Bir aboneliğin ülke ülke fiyatlarını getirir. 'Bu abonelik Türkiye'de kaça' türü sorular için.
| Name | Required | Description | Default |
|---|---|---|---|
| ulke | No | Sadece bu ülke, örn. TUR. Boşsa hepsi. | |
| limit | No | Kaç fiyat kaydı (varsayılan 200). | |
| abonelik_id | Yes | appstore__abonelikler'den gelen abonelik id'si. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety/scope profile is covered. The description adds no behavioral detail beyond that – no mention of the default limit, pagination, or what the country-by-country payload looks like. Adequate but thin against an already-informative annotation set.
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?
Two short sentences with zero filler; the core capability is front-loaded and the usage hint follows immediately. Nothing could be trimmed without losing substance.
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?
For a read-only lookup with fully documented parameters and no output schema, the description covers purpose and intent sufficiently for correct invocation. It could add a note on the returned price shape or per-country response, but nothing essential is missing.
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 all three parameters (ulke, limit, abonelik_id) are already documented in the schema, including defaults ('Boşsa hepsi', default 200) and the source of abonelik_id. The description adds no syntax or meaning beyond the schema, so the baseline of 3 applies.
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?
States a concrete verb and resource: it fetches a subscription's prices country by country ('Bir aboneliğin ülke ülke fiyatlarını getirir'). This distinguishes it from the sibling appstore__abonelikler (which manages the subscription itself), but the description never names or explicitly contrasts that sibling.
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?
Gives a clear usage trigger with an example question type ('Bu abonelik Türkiye'de kaça' türü sorular için), which tells the agent exactly which user intents map to this tool. It does not, however, state when NOT to use it or point to alternatives like play__abonelik_fiyatlari.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__aboneliklerBRead-only
Bir uygulamanın abonelik gruplarını ve içlerindeki abonelikleri listeler. Ürün kimliği (productId), süre ve durum bilgisi döner.
| Name | Required | Description | Default |
|---|---|---|---|
| uygulama_id | Yes | appstore__uygulamalar'dan gelen id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful return-content context (productId, duration, status), but discloses nothing about pagination, auth scope, or filtering limits. Adequate but not rich.
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?
Two tightly-scoped sentences with the core action front-loaded and the return fields appended. No wasted text; only slightly terse for a tool with an undocumented output shape.
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?
For a simple one-parameter read tool with annotations covering safety and no output schema, listing the returned fields (productId, duration, status) is enough for correct invocation. Missing only pagination/ordering details, which are minor here.
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 coverage is 100% and the single parameter uygulama_id is fully documented in the schema as coming from appstore__uygulamalar. The description adds no syntax, format, or sourcing detail beyond the schema, so the baseline 3 applies.
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?
States a specific verb ('listeler') and a precise resource ('abonelik gruplarını ve içlerindeki abonelikleri'), which is distinguishable from sibling appstore__abonelik_fiyatlari (prices) and play__abonelikler. It also names the returned fields. However, it does not explicitly contrast itself with any sibling tool, so it falls short of the 5 bar tied to sibling differentiation.
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?
There is no explicit when-to-use guidance, no alternatives (e.g., appstore__abonelik_fiyatlari for pricing) and no exclusions or prerequisites. The purpose merely implies a usage context, and no routing help is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__buildlerARead-only
TestFlight build'lerini listeler; işlenme durumunu ve son kullanma tarihini gösterir. En yeni build en üstte gelir. 'Yüklediğim build hazır mı' sorusunun cevabı.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Kaç build dönsün (varsayılan 20). | |
| uygulama_id | No | Belirtilirse sadece o uygulamanın build'leri. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuine behavioral value beyond that: results are ordered newest-first and each entry surfaces processing status and expiration date, which shapes how an agent interprets the output.
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?
Three short, front-loaded sentences with the core capability stated first and the ordering rule and use-case scoping appended. Minimal waste, though the closing question sentence lightly restates the already-clear purpose.
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?
For a read-only list tool with no output schema, the description usefully declares the key fields returned (processing status, expiration) and the sort order. Parameters are fully covered by the schema, so nothing essential is missing, though it could note whether results are paginated.
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 both parameters (limit, uygulama_id) are already documented in the schema; baseline is 3. The description adds no extra detail about the limit default or the filtering semantics beyond what the schema provides.
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?
States a specific verb and resource: listing TestFlight builds, with the added scope of processing status and expiry date. It clearly distinguishes its content from the sibling appstore__testflight_gruplari, but never explicitly names or contrasts with that sibling, so it falls short of a 5.
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?
Gives a concrete usage scenario ('is my uploaded build ready?') that tells the agent when this tool is the right call. It offers no explicit when-not or alternative-routing guidance (e.g. vs testflight_gruplari), so it stops at clear-context-without-exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__iap_urunlerARead-only
Uygulamanın tek seferlik uygulama içi satın alma ürünlerini listeler (abonelik olmayanlar).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Kaç ürün dönsün (varsayılan 200). | |
| uygulama_id | Yes | appstore__uygulamalar'dan gelen id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered and the description is consistent with it. The description adds no behavioral context beyond that (no pagination behavior, no return shape), so it does not exceed the annotation baseline.
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?
A single front-loaded sentence with zero waste; the scope qualifier that matters most for disambiguation is appended immediately.
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?
For a simple two-parameter read-only list tool with full schema coverage and annotations, the description is sufficient; no output schema exists so return values need not be explained. Minor shortfall is the absence of any note on whether results are paginated via limit.
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% – both uygulama_id and limit are documented in the schema. The description adds no syntax, format, or default information for either parameter, so the baseline 3 applies.
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?
Specific verb (listeler) plus resource (tek seferlik uygulama içi satın alma ürünleri) with an explicit scope qualifier (abonelik olmayanlar) that separates it from the sibling appstore__abonelikler. An agent can route between this and the subscription tool without opening either schema.
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 parenthetical 'abonelik olmayanlar' implies subscriptions live elsewhere, giving implied usage context, but no alternative tool is named and there is no when/when-not guidance. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__metin_guncelleADestructive
Bir sürümün mağaza metinlerini günceller: sürüm notları, açıklama, anahtar kelimeler, tanıtım metni. Yayındaki sürüm düzenlenemez, sadece hazırlanmakta olan sürüm düzenlenebilir.
| Name | Required | Description | Default |
|---|---|---|---|
| onayla | No | Veri değiştiren işlemler için true olmalı. Kullanıcı işlemi açıkça istemeden true verme. | |
| aciklama | No | Uygulama açıklaması. | |
| surum_notlari | No | 'Bu sürümde neler yeni' metni. | |
| tanitim_metni | No | Promosyon metni (en fazla 170 karakter). | |
| yerellestirme_id | Yes | appStoreVersionLocalization id'si. Bulmak için: appstore__surumler ile sürüm id'sini al, sonra magaza__cagir ile appStoreVersions_appStoreVersionLocalizations_getToManyRelated çağır. | |
| anahtar_kelimeler | No | Virgülle ayrılmış, en fazla 100 karakter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, so the mutation profile is known. The description adds genuinely new behavioral context beyond the annotations: the published-version immutability rule, which materially affects whether the call will succeed. It does not describe rollback or side effects, but it adds real value over the structured fields.
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?
Two sentences, zero waste. The action and affected fields come first, and the critical editing constraint is front-loaded second. Nothing redundant.
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?
For a mutation tool with no output schema but full annotation coverage and a 100%-documented schema, the description supplies the needed editing-scope constraint. It omits confirmation/error behavior, but that gap is minor given the onayla parameter and annotations already convey the destructive/open-world profile.
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 coverage is 100% and each parameter carries its own description (including the onayla confirmation flag and the localization-id lookup path), so the schema does the heavy lifting. The description's field list ('sürüm notları, açıklama, anahtar kelimeler, tanıtım metni') loosely maps to the params but adds no format or constraint detail beyond it – baseline 3.
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 states a specific verb and resource ('Bir sürümün mağaza metinlerini günceller') and enumerates the editable fields (release notes, description, keywords, promo text). No sibling performs this edit, so the agent can identify the tool, though it never names or contrasts a sibling explicitly.
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?
It gives a clear applicability constraint: only the in-preparation version can be edited, not the published one. This is strong when-to-use guidance, but it does not name an alternative tool for related operations or state prerequisites beyond the version state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__satis_raporuARead-only
Satış ve indirme raporunu indirir (TSV biçiminde). Günlük, haftalık, aylık veya yıllık olabilir. Apple raporları 1-2 gün gecikmeli yayınlar ve hiç satış olmayan gün için dosya üretmez. Not: SUBSCRIBER raporu yalnızca DETAILED alt türüyle çalışır; abonelik raporları çoğu zaman bir sürüm numarası ister (örn. 1_3).
| Name | Required | Description | Default |
|---|---|---|---|
| tur | No | Rapor türü (varsayılan SALES). | |
| surum | No | Rapor sürümü, örn. 1_0 / 1_2 / 1_3. Apple bazı rapor türlerinde zorunlu tutar; hata alırsan burayı doldur. | |
| tarih | Yes | Rapor tarihi. DAILY: YYYY-AA-GG, WEEKLY: o haftanın son günü (pazar) YYYY-AA-GG, MONTHLY: YYYY-AA, YEARLY: YYYY. | |
| siklik | No | Rapor sıklığı (varsayılan DAILY). | |
| alt_tur | No | Rapor alt türü. Boşsa SUMMARY; SUBSCRIBER için DETAILED seçilir. | |
| satici_no | Yes | Vendor number (App Store Connect → Ödemeler). | |
| satir_limiti | No | Kaç veri satırı gösterilsin (varsayılan 200). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Anotasyonlar salt-okunur ve yıkıcı olmayan profili zaten veriyor; açıklama buna ek olarak Apple'ın yayın gecikmesini, boş günlerde dosya üretilmemesini ve SUBSCRIBER için DETAILED zorunluluğunu ekliyor. Yetkilendirme gereksinimleri veya dosyanın nereye indirildiği belirtilmemiş.
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?
Dört cümle, ana amaç öne alınmış ve her cümle operasyonel bir bilgi taşıyor. Gereksiz tekrar veya dolgu yok.
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?
Çıktı şeması olmadığından açıklama dönüş biçimini (TSV) üstleniyor ve önemli tuzakları (gecikme, eksik dosyalar, alt tür kısıtı) kapsıyor. Dosyanın nasıl döndürüldüğü/kaydedildiği yönü eksik, bu da tek boşluk.
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?
Şema açıklama kapsamı %100 olduğundan her parametre zaten belgelenmiş; bu taban çizgisi 3'tür. Açıklama, SUBSCRIBER raporunun yalnızca DETAILED ile çalıştığını ve sürüm numarası gerektirdiğini ekleyerek alt_tur–tur–surum arası ilişkiye dair bir miktar ek değer katıyor, ancak şemadakilerle büyük ölçüde örtüşüyor.
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?
Uzun bir fiil+nesne ifadesi veriyor ('Satış ve indirme raporunu indirir') ve çıktı biçimini (TSV) belirtiyor. Kardeş araçlardan hiçbirini adlandırarak ayrıştırmıyor, ancak bu araç kardeş listesinde benzersiz bir rapor indirme işlevi görüyor.
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?
Raporların 1-2 gün gecikmeli yayınlandığını ve satışsız günler için dosya üretilmediğini belirtiyor; SUBSCRIBER alt türü kısıtını ve sürüm numarası gereksinimini açıklıyor. Ancak bir alternatif araç önerilmiyor veya 'şu durumda bunun yerine şunu kullan' yönlendirmesi yok.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__surumlerARead-only
Bir uygulamanın App Store sürümlerini ve durumlarını listeler (hazırlanıyor, incelemede, yayında, reddedildi...). 'Hangi sürüm incelemede takıldı' sorusunun cevabı burada.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Kaç sürüm dönsün (varsayılan 10). | |
| uygulama_id | Yes | appstore__uygulamalar'dan gelen id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered elsewhere. The description adds the set of possible status values, which is useful domain context, but says nothing about pagination behavior, ordering, or freshness of the data. Adequate but not rich.
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?
Two short sentences, zero filler, with the core capability front-loaded and the use-case question placed after it. Every clause earns its place.
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?
For a simple two-parameter read tool with no output schema, the description conveys what is returned (versions plus their statuses) well enough to call it correctly. Minor gaps around ordering and result count are covered by the 'limit' parameter default.
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%: both 'limit' (default 10) and 'uygulama_id' (sourced from appstore__uygulamalar) are fully documented in the schema. The description adds no parameter meaning beyond that, so the baseline of 3 applies.
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 names a specific verb (listeler) and resource (App Store sürümleri) scoped to one app, and enumerates the status values it returns. It is clearly distinguishable from sibling resources like appstore__uygulamalar and appstore__buildler, though it never states that distinction explicitly.
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?
It supplies a concrete usage context ('Hangi sürüm incelemede takıldı' sorusunun cevabı burada), which tells the agent which question this tool answers. It stops short of naming when-not-to-use or pointing to an alternative sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__testflight_gruplariBRead-only
Uygulamanın TestFlight beta gruplarını ve her gruptaki test kullanıcı sayısını listeler.
| Name | Required | Description | Default |
|---|---|---|---|
| uygulama_id | Yes | appstore__uygulamalar'dan gelen id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered structurally. The description adds only the returned shape (groups plus per-group test user counts) and says nothing about pagination, ordering, or auth scope.
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?
A single front-loaded sentence with no filler or redundancy. It is appropriately sized; it simply does not use the available space to add routing or behavioral context.
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?
For a one-parameter, read-only list tool with a fully documented schema and no output schema, the description conveys both what is listed and a key part of the return (test user counts), and annotations cover safety. Adequate, though sibling routing is absent.
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% and the schema already explains that uygulama_id comes from appstore__uygulamalar. The description adds no format or sourcing detail beyond that, so the baseline 3 applies.
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?
States a specific verb (listeler) and resource (TestFlight beta grupları) and even specifies the payload (test kullanıcı sayısı per group), so the agent knows exactly what comes back. However, it does not name or contrast with any sibling tool, so it stops short of a 5.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many sibling appstore__/play__ tools. Usage must be inferred entirely from the name and resource noun.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__uygulamalarARead-only
App Store Connect hesabındaki uygulamaları listeler. Her uygulamanın adını, bundle ID'sini, App Store ID'sini ve birincil dilini döndürür. Diğer araçların çoğu buradaki 'id' değerini ister.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Kaç uygulama dönsün (varsayılan 100). | |
| isim_filtresi | No | Uygulama adında geçen kelimeye göre süz. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the payload shape (ad, bundle ID, App Store ID, birincil dil), which is useful context the annotations do not provide, though it says nothing about pagination or default ordering.
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?
Three short sentences, front-loaded with the listing action and followed by return fields and the reason to call it. Every sentence carries information with no filler.
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?
With no output schema, the description compensates by naming the returned fields, and it explains the tool's role as an id source for sibling tools. Only minor gaps remain (pagination behavior, filtering semantics) for a simple two-parameter list tool.
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 coverage is 100% and both parameters (limit, isim_filtresi) are documented in the schema itself. The description adds no semantics beyond that, so a baseline 3 is correct.
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?
States a specific verb and resource ('App Store Connect hesabındaki uygulamaları listeler') and immediately enumerates the returned fields, so the agent knows exactly what this yields. The 'App Store Connect' scoping also implicitly separates it from the Play Store sibling (play__uygulamalar).
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?
It gives a clear reason to call it first: 'Diğer araçların çoğu buradaki id değerini ister,' telling the agent this is a prerequisite for id-consuming tools. There is no explicit when-not or named alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__yorumlarARead-only
Bir uygulamanın App Store müşteri yorumlarını getirir. Puana veya ülkeye göre süzülebilir, en yeniden eskiye sıralanır. Yorumları özetlemek, şikâyetleri bulmak veya cevap taslağı hazırlamak için kullan. Yoruma daha önce yanıt verilmişse onu da gösterir.
| Name | Required | Description | Default |
|---|---|---|---|
| puan | No | Sadece bu yıldız sayısındaki yorumlar (1-5). | |
| ulke | No | Üç harfli ülke kodu, örn. TUR, USA. | |
| limit | No | Kaç yorum dönsün (varsayılan 50). | |
| uygulama_id | Yes | appstore__uygulamalar'dan gelen id. | |
| yanitsizlar | No | Sadece henüz yanıtlanmamış yorumlar. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, open-world behavior. The description adds useful context beyond that: results are sorted newest to oldest, can be filtered by rating or country, and existing developer replies are included. It does not mention pagination or rate limits, so not a 5.
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?
Four sentences, front-loaded with the core action, and each sentence earns its place by covering filtering, sorting, use cases, and the inclusion of existing replies. No redundant or vague phrasing.
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?
For a read-only, open-world list tool with full parameter coverage and no output schema, the description covers purpose, filters, sorting, and reply inclusion. It could optionally state the return shape per review or pagination behavior, but the essentials are present.
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 all parameters are fully documented in the input schema. The description mentions filtering by rating or country, which maps to two parameters, but adds no syntax or format details beyond what the schema already provides. Baseline 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 states a specific verb (getirir) and resource (App Store müşteri yorumları), and the App Store qualifier distinguishes it from the Play sibling (play__yorumlar) and from the reply tool (appstore__yorum_yanitla). However, it does not explicitly name an alternative, so it falls just short of a 5.
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?
It gives clear when-to-use scenarios: summarize reviews, find complaints, or prepare response drafts. It also notes filtering and sorting behavior. It does not state when not to use it or name an alternative tool, so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore__yorum_yanitlaADestructive
Bir App Store yorumuna geliştirici yanıtı yazar. Yanıt Apple incelemesinden geçtikten sonra yayınlanır.
| Name | Required | Description | Default |
|---|---|---|---|
| yanit | Yes | Yanıt metni (en fazla 5970 karakter). | |
| onayla | No | Veri değiştiren işlemler için true olmalı. Kullanıcı işlemi açıkça istemeden true verme. | |
| yorum_id | Yes | appstore__yorumlar'dan gelen yorum id'si. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool is a destructive, non-read-only, open-world operation, so the safety profile is covered. The description adds a genuinely useful behavioral trait those annotations do not convey: the response only goes live after Apple moderation. It stops short of stating edit/overwrite semantics for an existing developer reply.
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?
Two short sentences, the action front-loaded and the moderation caveat immediately following. No filler whatsoever.
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?
For a mutation tool with no output schema, the description covers the action and the delayed-publication outcome, and annotations carry the destructive/open-world signal. Minor gaps remain around permissions and whether an existing reply can be replaced.
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 every parameter (yanit, onayla, yorum_id) is already documented, including the 5970-character limit and the confirmation flag semantics. The description adds nothing beyond that, so the baseline 3 applies.
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 gives a clear verb+resource: writing a developer response to an App Store review. Naming 'App Store' implicitly distinguishes it from the sibling play__yorum_yanitla, but it never explicitly routes between the two platform variants.
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?
There is no when-to-use guidance, no prerequisites, and no mention of the alternative sibling (play__yorum_yanitla for Google Play, or appstore__yorumlar for reading reviews first). The agent must infer the context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
magaza__abonelik_karsilastirARead-only
Aynı uygulamanın aboneliklerini App Store ve Google Play'de yan yana karşılaştırır: ürün kimlikleri, süreler ve istenen ülkedeki fiyatlar. İki mağaza arasındaki fiyat farklarını ve eksik ürünleri yakalar.
| Name | Required | Description | Default |
|---|---|---|---|
| ulke | No | Fiyatların karşılaştırılacağı ülke. App Store için 3 harfli (TUR), Play için 2 harfli (TR) kod kullanılır; hangisini verirsen ver, dönüştürülür. Varsayılan: Türkiye. | |
| uygulama | Yes | Uygulama adı, bundle id veya paket adı. İki mağazada da aranır. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds meaningful output behavior beyond annotations: it specifies that the result surfaces price differences between stores and flags missing products, not just raw subscription data. Return format and pagination are unstated, which is a minor 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?
Two sentences, front-loaded with the core action and the store scope, then immediately stating the value added. No redundant restatement of the tool name or filler.
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?
There is no output schema, but the description specifies the compared fields and the anomalies caught, which is the essential return content an agent needs to set expectations. Safety is covered by annotations. Missing pagination or response-shape detail is a minor gap for this comparison tool.
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 country code conversion (TUR/TR) and the dual-store app lookup semantics are fully documented in the schema. The description references requested-country prices but adds no syntax or defaults beyond what the schema already provides, so the baseline 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?
States a specific verb 'karşılaştırır' (compares), the resource 'abonelikler' (subscriptions), and the cross-store scope spanning App Store and Google Play. It enumerates the compared fields (product ids, durations, prices) and the detected anomalies (price differences, missing products), making it clearly distinct from single-store siblings like appstore__abonelikler and play__abonelikler.
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 cross-store comparison scope implicitly tells the agent when this tool is preferred over the single-store subscription tools, and the 'iki mağaza arasındaki' framing excludes single-store use. However, it never names an alternative explicitly or states a when-not condition, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
magaza__cagirADestructive
App Store Connect ve Google Play API'lerinde herhangi bir operasyonu çalıştırır. Operasyon adını önce magaza__endpoint_ara ile bul. Veri değiştiren işlemler (POST/PATCH/PUT/DELETE) onayla=true verilmeden çalışmaz.
| Name | Required | Description | Default |
|---|---|---|---|
| govde | No | İstek gövdesi (POST/PATCH için). | |
| magaza | Yes | Hangi mağaza. | |
| onayla | No | Veri değiştiren işlemler için true olmalı. Kullanıcı işlemi açıkça istemeden true verme. | |
| operasyon | Yes | magaza__endpoint_ara sonucundaki 'operasyon' değeri. | |
| parametreler | No | Yol ve sorgu parametreleri tek bir nesnede. Yol parametreleri otomatik yerine konur, kalanlar sorgu dizesine eklenir. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=true; the description adds the human-confirmation gate and the verb-based rule that selects it, which is genuinely new behavioral context. It stops short of describing rate limits, auth requirements, or what a failed/approved call returns.
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?
Three short sentences, zero filler: capability first, discovery step second, safety gate third. Ideal front-loading for a dispatcher tool.
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?
For a nested-object gateway with no output schema, it covers the key unknown (how to obtain a valid operation name) and the safety precondition. It omits what the response looks like and whether results are store-specific, a minor gap given the schema does the parameter work.
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 all five parameters are already documented in the schema (including onayla's 'don't set true unless the user asked'). The description restates the onayla rule rather than adding format or structure detail beyond it, matching the baseline 3.
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?
States a concrete verb+resource: running arbitrary operations against App Store Connect and Google Play APIs. It implicitly differentiates itself from the typed siblings (appstore__*, play__*) as the generic dispatcher, but never says why an agent would choose this over a dedicated tool.
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?
Explicitly tells the agent to resolve the operation name via magaza__endpoint_ara first, and states the precondition that mutating verbs (POST/PATCH/PUT/DELETE) require onayla=true. This is actionable when/when-not guidance tied to a named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
magaza__endpoint_araARead-only
App Store Connect ve Google Play API'lerinin tamamında uç nokta arar. Hazır araçlar arasında işini görecek bir şey yoksa önce bunu kullan: aradığın işlemin gerçek operasyon adını, parametrelerini ve HTTP yöntemini döndürür. Sonucu magaza__cagir ile çalıştırabilirsin. Örnek sorgular: 'abonelik fiyat', 'testflight tester', 'crash rate'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Kaç sonuç dönsün (varsayılan 15). | |
| sorgu | Yes | Aranacak kelimeler. Türkçe değil, API terimleriyle ara (örn. 'subscription price', 'review', 'build'). | |
| magaza | No | Belirtilmezse iki mağazada birden aranır. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it returns the operation's real name, parameters, and HTTP method, and its output feeds another tool. It does not mention result limits, caching, or failure modes, so it stops short of a 5.
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?
Front-loaded with the core action, then the routing rule, the follow-up tool, and examples. Every sentence earns its place and nothing is padded.
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?
With no output schema, the description carries the burden of explaining returns and does so (operation name, parameters, HTTP method) plus the downstream workflow via magaza__cagir. It does not describe result ordering, how endpoint identity is keyed, or pagination, and the example-query language mismatch could mislead slightly.
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 coverage is 100%, so the schema already documents sorgu/limit/magaza and sets the 3 baseline. The description adds sample queries ('subscription price', 'testflight tester', 'crash rate') that show how to shape a query, which is genuine extra value, though the Turkish example 'abonelik fiyat' sits in tension with the schema's instruction to search in API terms rather than Turkish.
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?
States a precise verb+resource (searches endpoints across all App Store Connect and Google Play APIs) and its scope (both stores). It also positions itself in the toolchain by naming magaza__cagir as the executor of results, so an agent can distinguish it from the concrete appstore__*/play__* siblings without opening a schema.
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?
Explicitly says when to reach for it ('if no ready-made tool does your job, use this first') and what to do next ('execute the result with magaza__cagir'). This is a clear when-to-use plus named-alternative pattern, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
magaza__genel_bakisARead-only
İki mağazadaki uygulamaları tek listede gösterir ve aynı ürünün iOS/Android eşlerini yan yana getirir. 'Nerede neyim var' sorusunun tek çağrılık cevabı.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds behavior annotations do not: it merges two separate stores into one list and aligns the same product across platforms, which is meaningful context about how the tool operates.
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?
Two sentences, zero filler, and the core capability is front-loaded before the usage framing. Every clause carries information.
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?
For a zero-param aggregation tool with no output schema, the description gives only a rough sense of the return (a merged list with paired entries) and says nothing about field structure, ordering, or volume. Adequate to call it correctly, but thin on what the agent will actually receive.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No misleading parameter claims are made.
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?
States a concrete verb and resource (lists the apps across two stores in one list) and adds a differentiating behavior: pairing iOS/Android counterparts of the same product. An agent can distinguish this cross-store aggregation from the per-store siblings like appstore__uygulamalar and play__uygulamalar, though no sibling is named explicitly.
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 closing line 'Nerede neyim var sorusunun tek çağrılık cevabı' frames the use case as a single-call overview, which is implied guidance. There is no explicit when-not or routing to alternatives such as magaza__abonelik_karsilastir or the per-store list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
magaza__iap_teshisARead-only
'Kullanıcı parayı ödedi ama premium göremiyor' tipi sorunları teşhis eder. Uygulamanın iki mağazadaki satın alma kurulumunu tek tek kontrol eder: ürünler yayında mı, istenen ülkede fiyatı var mı, abonelik aktif mi. Play satın alma token'ı verirsen onu da doğrular.
| Name | Required | Description | Default |
|---|---|---|---|
| ulke | No | Kontrol edilecek ülke (varsayılan Türkiye). | |
| uygulama | Yes | Uygulama adı, bundle id veya paket adı. | |
| play_token | No | İsteğe bağlı: şikâyet eden kullanıcının Play satın alma token'ı. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context by enumerating exactly what is checked (products live, priced in the requested country, subscription active) and noting the optional token verification. It stops short of describing what the diagnostic output looks like or any rate/scope limits, so it earns only a mid score against an already-covered annotation set.
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?
Three sentences, front-loaded with the symptom this tool addresses, then the scope of the check, then the optional token path. Nothing is padded, though the middle sentence's colon-list is slightly dense and the closing sentence partly restates the schema's play_token description.
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?
With no output schema, the description carries the burden of explaining what the agent gets back, and it does not – it describes what is inspected but not the shape or content of the diagnostic result, which is the entire value of a diagnosis tool. The input side is fully covered by the schema and the usage trigger is present, so the gap is real but localized.
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 all three parameters (ulke, uygulama, play_token) are already documented in the schema. The description reinforces the role of play_token as an optional addition but adds no format, syntax, or constraint detail beyond what the schema states, so baseline 3 applies.
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?
States a specific verb (teşhis eder / diagnoses) and a specific resource (the app's purchase setup across both stores), framed around a concrete symptom ('user paid but can't see premium'). This clearly distinguishes it from the sibling listing tools like play__urunler or appstore__iap_urunler, which enumerate rather than diagnose.
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 opening sentence gives a clear trigger condition – purchase-related complaints – which tells the agent when to reach for this tool. However, it never names the closest alternative (play__satin_alma_dogrula, which also verifies Play purchases) or states when not to use it, leaving the boundary between the two to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
magaza__semaARead-only
Bir operasyonun istek gövdesinin nasıl olması gerektiğini gösterir. POST/PATCH çağrılarından önce, gövdeyi doğru kurmak için kullan.
| Name | Required | Description | Default |
|---|---|---|---|
| magaza | Yes | ||
| operasyon | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, and the description is consistent with a pure inspection tool. It adds the useful behavioral fact that the output is a body template to be applied to a later write, but says nothing about failure modes or what happens when 'operasyon' is unknown.
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?
Two short sentences, the key purpose front-loaded and the usage rule immediately after. No filler, nothing redundant.
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?
With no output schema and 0% parameter coverage, the description should at least point at how to discover a valid operation name and what the returned shape looks like. It covers the core idea but leaves those gaps for a two-parameter tool.
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 0%, so the description carries the full burden, yet it never explains what 'operasyon' should contain or where to obtain a valid value (e.g. via magaza__endpoint_ara). Only the notion of 'magaza'/'operasyon' is loosely implied by the words in the sentence.
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?
Names a specific verb+resource: it returns the expected request body shape for a given store operation. The purpose is clear and distinguishes it from the execution sibling (magaza__cagir) by framing it as a pre-call schema lookup, though it never names that sibling explicitly.
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?
Gives explicit timing guidance: use it before POST/PATCH calls so the body is built correctly. It does not state exclusions (e.g. not needed for GET/DELETE) or name the companion tool that actually performs the call, so a small inference is left to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__abonelik_fiyatlariARead-only
Bir Play aboneliğinin temel planındaki ülke ülke fiyatlarını getirir. Listelenmemiş ülkeler için 'diger_bolgeler' yedek fiyatına da bakar.
| Name | Required | Description | Default |
|---|---|---|---|
| ulke | No | Sadece bu ülke, örn. TR. Boşsa hepsi. | |
| plan_id | No | Temel plan kimliği. Boşsa ilk plan kullanılır. | |
| urun_id | Yes | play__abonelikler'den gelen urun_id. | |
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful behavioral context beyond that: it explains the 'diger_bolgeler' fallback applied to unlisted countries, which the agent could not infer from structured fields.
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?
Two tight sentences with no filler, and the core purpose is front-loaded before the secondary fallback detail. Every sentence earns its place.
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?
For a read-only tool with a fully documented schema, no output schema, and no nested objects, the description covers the main behavior plus the notable fallback rule. It lacks only explicit scope/collation details, which are minor here.
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 every parameter (ulke, plan_id, urun_id, paket_adi) is already documented in the schema. The description adds no parameter-level detail, so the baseline 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 states a specific verb ('getirir') and resource (country-by-country prices for a Play subscription's base plan), which is concrete enough to distinguish it from the broader play__abonelikler listing tool. It does not explicitly name or contrast with any sibling, so it stops short of a 5.
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?
Usage context is only implied: the fallback behavior for unlisted countries hints at when the result set is complete, but there is no explicit when-to-use guidance or reference to alternatives like play__abonelikler or appstore__abonelik_fiyatlari. Nothing is misleading, but the routing guidance is thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__aboneliklerBRead-only
Uygulamanın aboneliklerini ve temel planlarını (base plan) listeler. Her planın süresi, durumu ve fiyatlandırıldığı ülkeler döner.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Kaç abonelik dönsün (varsayılan 50). | |
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. | |
| arsivi_dahil_et | No | Arşivlenmiş abonelikler de gelsin mi (varsayılan hayır). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds useful behavioral context by specifying the returned fields (duration, status, priced countries), but says nothing about pagination behavior despite a limit parameter, nor about auth requirements for a Play Console endpoint.
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?
Two tight sentences with the purpose front-loaded and the return fields following. No filler or repetition, though it is short enough that it leaves little room for the routing information an agent would benefit from.
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?
There is no output schema, but the description compensates by enumerating what is returned (süre, durum, fiyatlandırılan ülkeler), and read-only annotations cover the mutation profile. The main gap is the absence of any routing guidance relative to the many subscription-related siblings.
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 all three parameters (paket_adi, limit, arsivi_dahil_et) are already documented in the schema, which sets the baseline at 3. The description adds no parameter-level meaning beyond the schema, so it does not exceed the baseline.
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?
States a specific verb (listeler) and resource (abonelikler ve temel planlar), and goes further by naming the returned fields (süre, durum, ülke). It partially distinguishes itself from the price-oriented sibling play__abonelik_fiyatlari, but does not name that sibling explicitly.
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?
No guidance on when to use this versus play__abonelik_fiyatlari, appstore__abonelikler, or magaza__abonelik_karsilastir, all of which sit in the same domain. Usage is only implied by the phrase 'listeler', so the agent must guess at routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__cokme_oraniARead-only
Android vitals çökme oranını getirir (Play Developer Reporting). 'Uygulamam neden çöküyor, ne zamandan beri arttı' sorularının başlangıcı.
| Name | Required | Description | Default |
|---|---|---|---|
| gun | No | Kaç günlük veri (varsayılan 14). | |
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the useful fact that the data comes from Play Developer Reporting (an external source), consistent with openWorldHint, but says nothing about latency, freshness, or metric caveats.
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?
Two compact sentences with the core action front-loaded and the motivating question second. No filler, though the second sentence is more sales pitch than operational detail.
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?
For a read-only metric query with no output schema and fully documented parameters, the description plus annotations give the agent enough to call it correctly. It lacks any note on granularity or timezone handling for the day parameter, which is a minor gap.
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 both parameters (paket_adi, gun with its default of 14) are already documented in the schema. The description adds no further meaning about these parameters, making the baseline 3 correct.
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?
It states a specific verb and resource ('Android vitals çökme oranını getirir') plus the data source (Play Developer Reporting), which clearly separates it from siblings like play__yorumlar or play__abonelikler. It does not explicitly name an alternative tool, so it stays short of a 5.
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 second sentence frames a use case ('why is my app crashing, since when has it increased'), which implies when to reach for this tool. There is no explicit when-not guidance and no alternative tool is named, so the guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__iade_edilenlerARead-only
İptal edilmiş, iade edilmiş veya geri alınmış satın almaları listeler. Kullanıcının erişimini kesmen gerekip gerekmediğini anlamak için. Google yalnızca son 30 günü verir; daha eskisi API'de yoktur.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Kaç kayıt (varsayılan 100). | |
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. | |
| sadece_urunler | No | Sadece tek seferlik ürün iadeleri gelsin mi. Varsayılan hayır: abonelik iadeleri de listelenir. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a genuinely valuable operational constraint not present in the annotations: Google only exposes the last 30 days, and older refunds are unavailable via the API. It does not mention pagination behavior tied to the limit parameter.
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?
Three short sentences, each carrying distinct load: what it lists, why you'd call it, and the hard API limitation. Purpose is front-loaded with zero filler.
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?
For a read-only list tool with annotations covering safety, the description supplies the key missing context (30-day window). With no output schema, return shape and pagination semantics remain unstated, but they are largely inferable from the limit parameter, leaving only a minor gap.
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 limit, paket_adi and sadece_urunler are already fully documented in the schema. The description adds no syntax, format, or default detail beyond that, so the baseline of 3 applies.
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 opens with a precise verb+resource: listing cancelled/refunded/revoked purchases, which is a distinct resource from siblings like play__satin_alma_dogrula (purchase verification) or play__abonelikler. An agent can tell exactly what this returns without opening the schema.
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?
It gives a clear triggering context — 'to understand whether you need to revoke the user's access' — which tells the agent when this tool is the right choice. However, it names no alternative tool and states no when-not condition, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__kanallarARead-only
Uygulamanın yayın kanallarını (internal, alpha, beta, production) ve her kanaldaki sürümleri gösterir. Hangi sürümün hangi kanalda, yüzde kaç kullanıcıya açık olduğunu söyler. Not: Play bu bilgiyi yalnızca bir düzenleme oturumu içinden verir; araç oturumu kendi açar ve hiçbir şey commit etmeden kapatır. Bu yüzden salt-okunur modda bile ağa POST+DELETE gider (uygulamada hiçbir şey değişmez) ve servis hesabının sürüm yönetme yetkisi olmadan araç çalışmaz.
| Name | Required | Description | Default |
|---|---|---|---|
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that Play exposes this data only inside an edit session, that the tool opens and closes the session without committing, that network POST+DELETE traffic occurs even though nothing changes, and that the service account needs version-management permission. This is exactly the kind of hidden side-effect and prerequisite an agent otherwise could not anticipate.
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?
Front-loaded with the purpose, then the edit-session caveat. The note is dense but each clause is load-bearing (session behavior, side-effect profile, permission requirement). Slightly long but not padded.
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?
The description covers what the tool returns (channel/version mapping and rollout percentage), the operational caveat, and the permission prerequisite, which is everything an agent needs for a single-parameter read tool with no output schema.
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?
Only one parameter (paket_adi) and schema coverage is 100%, so the schema already carries the semantics including its example. The description adds no format or naming guidance beyond what the schema provides, so the baseline of 3 applies.
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?
States a specific verb and resource: lists the app's release channels (internal, alpha, beta, production) and the versions within each, plus rollout percentage. An agent can distinguish it from play__uygulamalar or the appstore__surumler sibling without opening a schema.
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 the context (auditing which version sits on which channel and to what audience share), but never states when to prefer it over siblings like play__uygulamalar or magaza__genel_bakis, and offers no exclusions. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__satin_alma_dogrulaBRead-only
Bir satın alma token'ını doğrular ve durumunu döndürür. 'Bu kullanıcının aboneliği gerçekten aktif mi' sorusunun cevabı. Abonelik veya tek seferlik ürün, ikisi de desteklenir.
| Name | Required | Description | Default |
|---|---|---|---|
| tur | No | Varsayılan: abonelik. | |
| token | Yes | Uygulamadan gelen satın alma token'ı. | |
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safe-read and remote-lookup profile is covered structurally. The description adds that both subscription and one-time products are handled and that a status is returned, but says nothing about auth/permission requirements or rate limits beyond what annotations give.
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?
Three short sentences, front-loaded with the core action before the framing question and the supported-scope note. No wasted filler, though the final sentence is somewhat redundant with the enum in the schema.
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?
A read-only verification tool with no output schema, so the description carries the burden of describing the returned status – yet 'durumunu döndürür' never says what status values or shape come back. Otherwise complete for a three-parameter call whose schema is fully documented.
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% and all three parameters (tur, token, paket_adi) are documented in the schema, so the baseline is 3. The description only echoes the subscription-vs-product distinction that the `tur` enum already encodes, adding no format or syntax detail.
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?
States a specific verb+resource ('satın alma token'ını doğrular' – verifies a purchase token) and the scope (subscription and one-time product). This distinguishes it from listing tools like play__abonelikler or play__urunler, though it never names a sibling explicitly, so it stops short of a 5.
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?
Gives an implied usage framing via the question it answers ('is this user's subscription really active?'), which helps an agent recognize the right moment. But it offers no when-not-to-use guidance or routing to alternatives such as magaza__iap_teshis or play__abonelikler, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__urunlerARead-only
Tek seferlik uygulama içi ürünleri listeler. Yeni ürün modeline geçmiş uygulamalarda oneTimeProducts, geçmemişlerde eski inappproducts uç noktası kullanılır — bu araç ikisini de dener, hangisinin çalıştığını söyler.
| Name | Required | Description | Default |
|---|---|---|---|
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive, open-world behavior, so the bar is lower. The description adds real behavioral value by disclosing the dual-endpoint fallback (oneTimeProducts for migrated apps, inappproducts otherwise) and that the tool reports which endpoint succeeded, which helps an agent interpret results.
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?
Two sentences, front-loaded with purpose and followed by the relevant behavioral nuance about endpoint selection. Nothing is redundant or padded.
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?
For a read-only, single-parameter listing tool with no output schema, the description covers what the tool returns at a high level (product listing) and explains the fallback behavior. It could go further on result shape or error handling, but the essentials are present.
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?
There is a single parameter and schema coverage is 100%, so the schema already documents 'paket_adi' with an example. The description adds no parameter-level detail, which is the expected baseline 3 when the schema does the work.
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?
States a specific verb and resource: 'lists one-time in-app products' ('Tek seferlik uygulama içi ürünleri listeler'). The qualifier 'tek seferlik' cleanly separates it from the subscription-oriented siblings like play__abonelikler and appstore__abonelikler.
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?
Usage is implied by the resource scope (one-time products), but the description never says when to choose it over alternatives such as play__abonelikler or magaza__iap_teshis, nor are prerequisites or exclusions stated. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__uygulamalarARead-only
Servis hesabının eriştiği Google Play uygulamalarını listeler. Diğer play__ araçlarının istediği paket adını (packageName) buradan al. Not: bu liste Play Developer Reporting API'sinden gelir, çünkü Android Publisher API'sinde uygulama listeleme uç noktası yoktur.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Kaç uygulama dönsün (varsayılan 50, en çok 1000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds genuine context beyond them: the data source (Play Developer Reporting API) and the reason (Android Publisher API has no listing endpoint), plus the auth scoping to the service account. It doesn't cover pagination or truncated-result behavior, so not a 5.
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?
Three short sentences, front-loaded with the core action, then the usage pointer, then the caveat. No wasted text and every sentence carries distinct information.
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?
For a simple read-only list tool with annotations covering the safety profile and 100% schema coverage, the description is nearly complete and even explains what the returned package names are for (feeding other tools). Minor gap: no return-format or volume expectation, though no output schema exists to carry it.
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 single 'limit' parameter (default 50, max 1000) is fully documented in the schema. The description adds nothing about parameters; baseline 3 applies.
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?
States a specific verb (listeler) and resource (Google Play uygulamaları) scoped to the service account's access, which distinguishes it from the operation-specific play__ siblings. An agent immediately knows this is the discovery/enumeration tool.
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?
Explicitly routes usage: 'Diğer play__ araçlarının istediği paket adını (packageName) buradan al' tells the agent this is the prerequisite call for other tools. There is no alternative for listing Play apps, so no exclusion is needed, though it doesn't state a 'when not to use'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__yorumlarARead-only
Google Play kullanıcı yorumlarını getirir. Play yalnızca son ~1 haftanın yorumlarını API'den verir; daha eskisi için Play Console dışa aktarımı gerekir.
| Name | Required | Description | Default |
|---|---|---|---|
| dil | No | Çeviri dili, örn. tr. Boşsa orijinal dilde gelir. | |
| limit | No | Kaç yorum dönsün (varsayılan 50). | |
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely useful behavior beyond them: the API's ~1-week data window and the export fallback. It omits pagination and rate-limit behavior, but the freshness caveat is a meaningful addition.
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?
Two short sentences with zero waste. The core purpose leads, and the data-limitation caveat follows immediately, so the most decision-relevant fact is front-loaded rather than buried.
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?
For a read-only, open-world tool with full schema coverage and no output schema, the description covers the one non-obvious constraint an agent must know. Return shape and pagination are left implicit, but nothing critical to correct invocation is missing.
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% with three well-documented parameters (dil, limit, paket_adi), so the schema carries parameter meaning. The description adds no syntax, default, or format detail beyond it, which is the expected baseline when coverage is complete.
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?
States a specific verb and resource ('Google Play kullanıcı yorumlarını getirir'), so the agent knows this retrieves Play reviews rather than App Store reviews. It does not explicitly contrast itself with the sibling play__yorum_yanitla (reply), though the verb alone implies the read-only 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?
Gives a clear situational constraint: Play only exposes roughly the last week of reviews via API, and older data requires Play Console export. That tells the agent when this tool is insufficient, but it does not name the sibling tools or state positive invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play__yorum_yanitlaADestructive
Bir Google Play yorumuna geliştirici yanıtı yazar. Yanıt herkese açık yayınlanır ve geri alınamaz; onayla=true verilmeden çalışmaz.
| Name | Required | Description | Default |
|---|---|---|---|
| yanit | Yes | Yanıt metni (en fazla 350 karakter). | |
| onayla | No | Yayınlamak için true olmalı. Kullanıcı bu yanıtın yayınlanmasını açıkça istemeden true verme. | |
| yorum_id | Yes | play__yorumlar'dan gelen yorum id'si. | |
| paket_adi | Yes | Uygulamanın paket adı, örn. com.sirket.uygulama. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds the crucial specifics: the reply is publicly visible and cannot be undone, and it silently refuses to run without onayla=true. That is meaningful risk detail beyond the structured hints, though it stops short of describing auth scopes or error 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?
Two tight sentences: purpose first, then the risk and the confirmation gate. Nothing is padded and the most consequential fact (irreversible, public) is front-loaded after the action.
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?
For a 4-param mutation with no output schema and clear annotations, the description covers action, publicity, irreversibility, and the confirmation gate. It lacks only ancillary details (which review states accept replies, what happens on invalid yorum_id), which are minor for this scope.
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 coverage is 100%, so all four parameters (including the 350-char limit, the yorum_id source, and the confirmation gate) are already documented in the schema. The description restates the onayla requirement without adding format or constraint detail beyond it, so the baseline 3 applies.
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?
States a specific verb and resource: writing a developer reply to a Google Play review. Combined with the sibling list, an agent can distinguish it from play__yorumlar (reading reviews) and appstore__yorum_yanitla (the App Store equivalent) by platform and action.
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?
Gives a real prerequisite ('onayla=true verilmeden çalışmaz') but no when-to-use vs alternatives, no indication of which reviews are valid targets, and no mention of rate limits or eligibility. The gating condition is useful but not a full usage policy.
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.
27 tool updates
v0.1.0- First observed
appstore__abonelik_fiyatlari - First observed
appstore__abonelikler - First observed
appstore__buildler - First observed
appstore__iap_urunler - First observed
appstore__metin_guncelle - First observed
appstore__satis_raporu - First observed
appstore__surumler - First observed
appstore__testflight_gruplari - First observed
appstore__uygulamalar - First observed
appstore__yorum_yanitla - First observed
appstore__yorumlar - First observed
magaza__abonelik_karsilastir - First observed
magaza__cagir - First observed
magaza__endpoint_ara - First observed
magaza__genel_bakis - First observed
magaza__iap_teshis - First observed
magaza__sema - First observed
play__abonelik_fiyatlari - First observed
play__abonelikler - First observed
play__cokme_orani - First observed
play__iade_edilenler - First observed
play__kanallar - First observed
play__satin_alma_dogrula - First observed
play__urunler - First observed
play__uygulamalar - First observed
play__yorum_yanitla - First observed
play__yorumlar
TDQS
Scored across 27 tools
The appstore__/play__ namespaces plus the magaza__ cross-store tools make most purposes clearly distinct (list versions vs. list builds vs. list reviews vs. reply to review). The only real overlap is the meta-tool trio (endpoint_ara, cagir, sema) which can reach any operation that the specific tools already wrap, so an agent could occasionally pick cagir where a dedicated tool would be better. Descriptions mostly resolve this by describing a clear workflow (find → schema → call).
All names are lowercase snake_case with a consistent platform prefix (magaza__, appstore__, play__), which gives a strong predictable grouping. The internal pattern mixes pure-resource nouns (uygulamalar, surumler, yorumlar) with resource_action forms (yorum_yanitla, metin_guncelle, satin_alma_dogrula), a minor deviation but still readable and internally consistent within each namespace.
At 27 tools the set is heavy, sitting just above the 25-tool threshold, though the surface spans two independent platforms (App Store + Play) across ~10 resource types each, which explains most of the count. The three generic meta-tools (endpoint_ara, cagir, sema) partially overlap with the dedicated wrappers, so a handful of tools could arguably be collapsed. Borderline but largely justified by the domain breadth.
Coverage is strong: apps, versions, builds, reviews (with replies), subscriptions, IAP products, pricing, sales reports, purchase verification, refunds, crash rate, plus cross-store comparison and purchase diagnosis. Dedicated gaps exist (no Play metadata update, no build upload/submit-for-review tool), but magaza__cagir/endpoint_ara/sema provide an escape hatch to the full App Store Connect and Play APIs, so agents are unlikely to hit a dead end.
Maintenance
Related MCP Connectors
- metarunOAuthdev.metarun
Run App Store Connect from your IDE: pricing, listings, screenshots, releases, AI visibility.
- app-managerOAuthapp.lance
App Store Connect operator for AI agents: icons, TestFlight builds, listings, IAP, rejection fixes.
AI-agent operations for App Store Connect and Google Play, with approval before live publishing.
AI-agent operations for App Store Connect and Google Play, with approval before live publishing.
Related MCP Servers
- AlicenseAqualityDmaintenanceManages App Store Connect and Google Play Console metadata, releases, and ASO workflows locally through MCP tools, enabling store management directly from AI clients without manual console navigation.1021 npm3MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple App Store Connect operations including app management, TestFlight, analytics, reviews, subscriptions, and more through 54 tools.6147 npm11MIT
- AlicenseNot gradedqualityBmaintenanceAutomate App Store Connect from your AI agent. Manage versions, metadata, builds, and submissions through natural language.10 npm9MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to manage Apple App Store Connect resources like apps, builds, TestFlight, and reviews through natural language.2010 npmMIT