Skip to main content
Glama
extentos

extentos

getPermissions

Derive Android permissions, iOS plist keys, Meta DAT scopes, and runtime grants for chosen SDK capabilities. Use it after selecting features to prevent silent permission failures.

Instructions

Derive the Android permissions, iOS Info.plist keys, Meta DAT scopes, AND the runtime grants a list of SDK capabilities requires. Returns { android, ios, metaDat, runtimeGrants, summary }. runtimeGrants is the half that is not a manifest entry — the OS grants nothing until the app ASKS at runtime, and applying every returned plist key still ships a mute app if you skip it. Each entry says who asks (requestedBy: app | sdk), the exact call when it is yours, and what silence looks like when nobody does. On iOS the microphone is the app's job and its absence is invisible: no prompt, no error, no transcripts, every voice command dead on hardware while working perfectly in the simulator — ALWAYS all three platform blocks regardless of the platform argument (which only frames the one-line summary; it does NOT filter the response). android = { permissions[], manifestEntries[] (ready-to-paste lines), foregroundService: { required, types[], declaration, devInstructions }, notificationListener: { required, declaration, devInstructions }, minimumSdk, compileSdk, targetSdk }. ios = { plistKeys: [{ key, value, reason }] }. metaDat = { scopes[], registrationRequired, registrationSteps[] }. Capabilities that need no platform permission (e.g. speak, connection_state, earcon) contribute nothing and are accepted silently — they never error. USE after deciding which features (capture_photo, transcription_incremental, voice_command, …) the app integrates. DON'T USE for capability discovery (use getPlatformInfo).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
platformYesSelects how the one-line `summary` is phrased (Android vs iOS framing). Required — but does NOT filter the response: the android, ios, and metaDat blocks are all returned either way.
capabilitiesYesCapability names from getPlatformInfo.features[].name. e.g. ['capture_photo', 'transcription_incremental', 'voice_command'].
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and delivers richly. It discloses critical behavioral traits: runtimeGrants is 'the half that is not a manifest entry,' the platform argument 'does NOT filter the response,' and capabilities needing no permission 'are accepted silently — they never error.' It even explains the consequence of skipping runtime grants (mute app).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with backticked field names and explicit blocks. Every sentence earns its place given the complexity of the tool. It is front-loaded with the core purpose before diving into details. Slightly dense, but appropriate for the information density required.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description fully enumerates the return structure: '{ android, ios, metaDat, runtimeGrants, summary }' with subfields. It also covers edge cases (silent acceptance, platform non-filtering, runtime grant implications). For a tool with this complexity, the description leaves no critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by giving concrete capability examples and explaining that the platform argument only shapes the summary line, not the response. However, the schema already covers the core semantics of both parameters, so the extra information is enhancement rather than necessity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Derive the Android permissions, iOS Info.plist keys, Meta DAT scopes, AND the runtime grants a list of SDK capabilities requires,' which is a specific verb+resource statement. It explicitly distinguishes from sibling tools by ending with 'DON'T USE for capability discovery (use getPlatformInfo).'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'USE after deciding which features (capture_photo, transcription_incremental, voice_command, …) the app integrates.' It also provides a clear exclusion: 'DON'T USE for capability discovery (use getPlatformInfo).' This is a model of usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/extentos/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server