{
  "$schema": "https://a2a.dev/schemas/agent-card.v1.json",
  "protocolVersion": "0.3.0",
  "name": "Appnalysis",
  "title": "Appnalysis Agent",
  "description": "Appnalysis is an AI-powered App Intelligence and decision-support platform for the mobile app sector. Ask any question about an app, a competitor, a category, an SDK, a market or a regulation and get analyst-grade prose with inline citations, drawn from real iOS and Android binary analysis, live App Store and Google Play signals, Appnalysis mobile-sector insights, and regulatory activity. Callable over native A2A JSON-RPC at https://info.appnalysis.com/a2a and over MCP at https://info.appnalysis.com/mcp. A bearer token is always required, but no account is needed to start: \"Continue as guest\" on the Appnalysis OAuth login page mints a self-service 7-day token at the reduced anonymous tier. Signing in with a real Appnalysis account unlocks the Registered and Paid tiers.",
  "version": "1.0.0",
  "url": "https://info.appnalysis.com/mcp",
  "preferredTransport": "MCP+STREAMABLE_HTTP",
  "documentationUrl": "https://info.appnalysis.com/mcp",
  "iconUrl": "https://info.appnalysis.com/favicon.ico",
  "provider": {
    "organization": "Appnalysis®",
    "url": "https://info.appnalysis.com"
  },
  "supportedInterfaces": [
    {
      "url": "https://info.appnalysis.com/mcp",
      "transport": "MCP+STREAMABLE_HTTP",
      "preferred": true,
      "description": "Appnalysis MCP endpoint (streamable HTTP, MCP protocol 2025-06-18). Exposes one public tool, ask_appnalysis."
    },
    {
      "url": "https://info.appnalysis.com/a2a",
      "transport": "JSONRPC",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "0.3.0",
      "description": "Native A2A JSON-RPC 2.0 endpoint. message/send returns a completed task (answer + Stage 2 citations) or input-required for clarification. account/create_provisional needs no token."
    }
  ],
  "additionalInterfaces": [
    {
      "url": "https://info.appnalysis.com/mcp",
      "transport": "MCP+STREAMABLE_HTTP"
    },
    {
      "url": "https://info.appnalysis.com/a2a",
      "transport": "JSONRPC"
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://modelcontextprotocol.io/schemas/sep-2127/server-card.v1.json",
        "description": "MCP server card describing the ask_appnalysis tool, access model and tiers.",
        "required": false,
        "params": {
          "server_card_url": "https://info.appnalysis.com/.well-known/mcp/server-card.json",
          "server_cards_url": "https://info.appnalysis.com/.well-known/mcp/server-cards.json",
          "protocolVersion": "2025-06-18",
          "transport": "streamable-http"
        }
      },
      {
        "uri": "https://agentskills.io/schemas/discovery/v0.2.0/index.json",
        "description": "Agent skills index with the full markdown skill cards.",
        "required": false,
        "params": {
          "skills_index_url": "https://info.appnalysis.com/.well-known/agent-skills/index.json"
        }
      }
    ]
  },
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "text/plain",
    "application/json"
  ],
  "skills": [
    {
      "id": "ask-appnalysis",
      "name": "Ask Appnalysis",
      "description": "Ask any question about mobile apps, competitors, app stores, SDKs, regulations, market trends, rankings, categories, privacy, monetisation and technology choices. The single MCP tool ask_appnalysis orchestrates four data sources — App Intelligence from real iOS and Android binary analysis, Appnalysis mobile-sector insights, live App Store and Google Play signals, and regulatory activity — and returns analyst-grade prose with inline citations and structured _meta.",
      "tags": [
        "app-intelligence",
        "mobile-apps",
        "competitor-analysis",
        "app-store",
        "google-play",
        "sdk-detection",
        "monetisation",
        "market-intelligence",
        "regulation",
        "citations"
      ],
      "examples": [
        "How is Duolingo trending in the UK App Store?",
        "Who competes with Calm on iOS, and how do their SDK stacks differ?",
        "Which ad networks and analytics SDKs are inside the Monzo Android app?",
        "What are users saying in recent 1-star reviews of a banking app?",
        "Show the Top Free Health & Fitness charts for Germany and explain the movement.",
        "What DSA and DMA exposure should an app store operator plan for this year?"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "text/plain",
        "application/json"
      ],
      "security": [
        {
          "guestJwt": [
            "mcp:read",
            "mcp:tools"
          ]
        },
        {
          "bearerJwt": [
            "mcp:read",
            "mcp:tools"
          ]
        }
      ]
    },
    {
      "id": "auth-md",
      "name": "Agent authentication discovery",
      "description": "How an AI agent or MCP client authenticates to the Appnalysis MCP resource. Resolves the auth.md / agent_auth discovery flow end-to-end for the anonymous identity path: RFC 9728 protected-resource metadata, OAuth authorization-server metadata, /agent/identity registration, the RFC 7523 jwt-bearer token exchange, RFC 7009 revocation, and the JWKS used to verify identity assertions.",
      "tags": [
        "authentication",
        "oauth2",
        "rfc9728",
        "rfc7523",
        "jwks",
        "mcp",
        "agent-identity"
      ],
      "examples": [
        "How do I register an anonymous agent identity with Appnalysis?",
        "Which grant type do I use to exchange an identity assertion for an access token?",
        "Where is the JWKS endpoint for verifying Appnalysis identity assertions?"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/plain",
        "text/markdown"
      ]
    },
    {
      "id": "create-free-account",
      "name": "Create a free account",
      "description": "Create a free Appnalysis account for a new email with no password. Returns a 24-hour provisional Registered-tier token; the user must click the activation email to keep it, and the token is revoked immediately if that email bounces. A2A method account/create_provisional with email, first_name, last_name.",
      "tags": [
        "onboarding",
        "provisional-access",
        "account",
        "a2a",
        "webmcp"
      ],
      "examples": [
        "Create a free Appnalysis account for jane@example.com, Jane Doe."
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ],
  "securitySchemes": {
    "guestJwt": {
      "type": "oauth2",
      "description": "Self-service 7-day guest token from the Appnalysis OAuth login page (\"Continue as guest\"): no account, no card, no refresh token. Resolves at the reduced anonymous tier — public Appnalysis knowledge layer only, live store lenses blocked. Re-authenticate after 7 days.",
      "flows": {
        "authorizationCode": {
          "authorizationUrl": "https://info.appnalysis.com/oauth/authorize",
          "tokenUrl": "https://info.appnalysis.com/oauth/token",
          "scopes": {
            "mcp:read": "Read Appnalysis answers and schema resources",
            "mcp:tools": "Call the ask_appnalysis tool"
          }
        }
      }
    },
    "bearerJwt": {
      "type": "http",
      "scheme": "bearer",
      "bearerFormat": "JWT",
      "description": "Signed JWT for a real Appnalysis account (OAuth 2.1 authorization code + PKCE, or a Personal Access Token from Account → Connected agents) resolves at that account's Registered or Paid tier. See https://info.appnalysis.com/auth.md and the OAuth protected-resource metadata."
    }
  },
  "security": [
    {
      "guestJwt": [
        "mcp:read",
        "mcp:tools"
      ]
    },
    {
      "bearerJwt": [
        "mcp:read",
        "mcp:tools"
      ]
    }
  ],
  "supportsAuthenticatedExtendedCard": false,
  "x-appnalysis": {
    "primary_entry_point": "https://info.appnalysis.com/mcp",
    "mcp": {
      "server_card_url": "https://info.appnalysis.com/.well-known/mcp/server-card.json",
      "server_cards_url": "https://info.appnalysis.com/.well-known/mcp/server-cards.json",
      "endpoint": "https://info.appnalysis.com/mcp",
      "transport": "streamable-http",
      "protocolVersion": "2025-06-18"
    },
    "skills_index_url": "https://info.appnalysis.com/.well-known/agent-skills/index.json",
    "authentication": {
      "supported": [
        "guest-jwt-7d",
        "bearer-jwt"
      ],
      "oauth_protected_resource_url": "https://info.appnalysis.com/.well-known/oauth-protected-resource/mcp",
      "authorization_server_url": "https://info.appnalysis.com/.well-known/oauth-authorization-server",
      "jwks_uri": "https://info.appnalysis.com/.well-known/jwks.json",
      "notes": "There is no token-free path: initialize returns 401 with an RFC 9728 WWW-Authenticate challenge. Guest tokens need no account and last 7 days at the reduced anonymous tier; signing in unlocks Registered and Paid tiers.",
      "token_required": true,
      "account_required": false,
      "guest": {
        "how": "Choose \"Continue as guest\" on the Appnalysis OAuth login page during the standard authorization-code + PKCE flow.",
        "token_lifetime_days": 7,
        "refreshable": false,
        "scopes": [
          "mcp:read",
          "mcp:tools"
        ]
      },
      "provisional": {
        "how": "A2A account/create_provisional or WebMCP create_free_account, new emails only",
        "token_lifetime_hours": 24,
        "tier": "registered",
        "revoked_on": [
          "activation email bounce",
          "complaint",
          "send failure"
        ]
      }
    },
    "documentation": {
      "llms_txt": "https://info.appnalysis.com/llms.txt",
      "llms_full": "https://info.appnalysis.com/llms-full.txt",
      "sitemap": "https://info.appnalysis.com/sitemap.xml",
      "auth": "https://info.appnalysis.com/auth.md"
    },
    "contact": "compliance@appnalysis.com",
    "aliases": {
      "server_card_plural": "https://info.appnalysis.com/.well-known/mcp/server-cards.json",
      "server_card_singular": "https://info.appnalysis.com/.well-known/mcp/server-card.json"
    },
    "a2a": {
      "endpoint": "https://info.appnalysis.com/a2a",
      "transport": "JSONRPC",
      "protocolVersion": "0.3.0",
      "methods": [
        "message/send",
        "account/create_provisional"
      ],
      "oauth_protected_resource_url": "https://info.appnalysis.com/.well-known/oauth-protected-resource/a2a",
      "task_model": "synchronous; no task history (tasks/get returns TaskNotFound)",
      "artifacts": "answer text plus Stage 2 citations only"
    }
  }
}
