{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"github_mcp-gannonh-firebase-mcp","slug":"mcp-gannonh-firebase-mcp","name":"firebase-mcp","type":"mcp","url":"https://github.com/gannonh/firebase-mcp","page_url":"https://unfragile.ai/mcp-gannonh-firebase-mcp","categories":["mcp-servers"],"tags":["firebase","modelcontextprotocol"],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"github_mcp-gannonh-firebase-mcp__cap_0","uri":"capability://tool.use.integration.firestore.document.crud.operations.via.mcp.tool.registry","name":"firestore document crud operations via mcp tool registry","description":"Exposes Firestore read, write, update, and delete operations as standardized MCP tools that AI clients can invoke. The FirebaseMcpServer class registers individual tool handlers (firestore_add_document, firestore_get_document, firestore_update_document, firestore_delete_document) that map directly to Firestore SDK methods, with schema-based parameter validation and error handling that converts Firebase exceptions into structured MCP responses. Each tool accepts collection path and document data as parameters, executes the operation against the initialized Firebase instance, and returns typed results (document IDs, success confirmations, or error details).","intents":["I want Claude to read and write data to my Firestore database without giving it direct Firebase credentials","I need to let an AI agent perform CRUD operations on specific Firestore collections as part of a larger workflow","I want to expose Firestore operations to multiple AI clients (Claude, Cursor, VS Code) through a single standardized interface"],"best_for":["Teams building AI agents that need persistent data storage in Firestore","Developers integrating Firebase into MCP-compatible AI applications (Claude, Cursor, VS Code)","Builders prototyping AI workflows that require structured database operations without direct credential exposure"],"limitations":["No built-in transaction support — each operation is atomic but multi-document transactions must be orchestrated by the client","No real-time listener support — only point-in-time reads and writes, no subscription-based updates","Filtering and querying limited to basic collection listing; complex WHERE clauses require client-side filtering of results","No batch operation optimization — bulk writes execute as individual tool calls, adding latency for large datasets"],"requires":["Firebase project with Firestore database initialized","Service account JSON key or Firebase credentials configured via environment variables","Node.js 18+ runtime","MCP-compatible client (Claude, Cursor, VS Code with MCP support)"],"input_types":["collection path (string)","document ID (string)","document data (JSON object)","update payload (partial JSON object)"],"output_types":["document ID (string)","document snapshot (JSON object)","success confirmation (boolean)","error message (string)"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_1","uri":"capability://tool.use.integration.firestore.document.listing.and.filtering.via.collection.traversal","name":"firestore document listing and filtering via collection traversal","description":"Implements firestore_list_documents and firestore_list_collections tools that traverse Firestore collection hierarchies and return paginated document snapshots. The implementation queries collections using the Firestore SDK, optionally applies client-side filtering based on field predicates passed as parameters, and returns structured arrays of documents with metadata. The tool supports nested collection discovery (listing subcollections within documents) and basic field-based filtering without requiring complex WHERE clause syntax, making it accessible to AI clients that may not be familiar with Firestore query syntax.","intents":["I want an AI agent to discover what data exists in my Firestore collections without writing complex queries","I need to let Claude list documents matching simple criteria (e.g., all documents where status='active') without exposing query language complexity","I want to explore Firestore collection structure programmatically to understand data organization"],"best_for":["AI agents performing data discovery or inventory tasks","Non-technical users who want AI to explore their Firestore data","Developers building AI workflows that need to find documents by simple field matching"],"limitations":["No support for complex queries (compound WHERE clauses, range queries, ordering) — filtering is field-equality only","No pagination cursor support — results are limited to a fixed page size, requiring multiple calls for large collections","Client-side filtering means all documents are fetched then filtered, causing performance degradation on large collections","No index awareness — complex queries that would benefit from composite indexes cannot be expressed"],"requires":["Firebase project with Firestore database","Service account credentials with read access to target collections","Node.js 18+"],"input_types":["collection path (string)","filter field name (string, optional)","filter value (any type, optional)","document ID (string, for subcollection listing)"],"output_types":["array of document objects with id and data fields","array of collection names (strings)","document count (number)"],"categories":["tool-use-integration","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_10","uri":"capability://tool.use.integration.storage.file.listing.with.path.prefix.filtering.and.metadata","name":"storage file listing with path prefix filtering and metadata","description":"Implements storage_list_files tool that enumerates files in a Firebase Storage bucket with optional path prefix filtering. The tool queries the Storage bucket using the Admin SDK's listFiles() method, optionally filters results by a path prefix (e.g., 'uploads/2024/'), and returns an array of file metadata including name, size, creation date, and content type. The implementation supports pagination through a maxResults parameter, allowing large buckets to be enumerated incrementally. Results are returned as structured objects with file paths and metadata, enabling AI clients to discover and analyze bucket contents.","intents":["I want an AI agent to discover what files exist in my Storage bucket","I need Claude to list files in a specific directory (prefix) to understand bucket organization","I want to let an AI system audit Storage contents or generate reports about stored files"],"best_for":["Storage auditing and inventory workflows","AI agents that need to discover available files before processing","Systems managing file organization and cleanup"],"limitations":["No recursive directory listing — prefix filtering is flat, not hierarchical","Metadata is limited to name, size, creation date, content type — no custom metadata","No sorting or filtering by date/size — results are in bucket order","Pagination requires manual token management — no automatic iteration"],"requires":["Firebase Storage bucket initialized","Read permissions on the bucket"],"input_types":["bucket prefix (string, optional)","max results (number, optional)"],"output_types":["array of file objects with name, size, timeCreated, contentType","pagination token (string, optional)"],"categories":["tool-use-integration","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_11","uri":"capability://tool.use.integration.firestore.document.addition.with.auto.generated.id.support","name":"firestore document addition with auto-generated id support","description":"Implements firestore_add_document tool that creates new documents in Firestore collections with either auto-generated or specified document IDs. The tool accepts a collection path and document data, and optionally a document ID. If no ID is provided, Firestore generates a unique ID automatically using its ID generation algorithm. The implementation uses the Firestore SDK's add() method (for auto-ID) or set() method (for specified IDs), both of which are atomic operations. The tool returns the generated or specified document ID and optionally the full document snapshot, enabling AI clients to reference newly created documents.","intents":["I want an AI agent to create new records in Firestore (users, posts, events) with auto-generated IDs","I need Claude to add documents to a collection and receive the generated ID for subsequent operations","I want to let an AI system create documents with specific IDs when needed"],"best_for":["AI agents creating new records (user profiles, content, transactions)","Workflows that need to generate and track document IDs","Systems requiring atomic document creation"],"limitations":["No batch creation — each document requires a separate tool call","No validation of document structure — any JSON object is accepted","No default field injection — documents are created exactly as provided","No duplicate detection — creating documents with the same data creates duplicates"],"requires":["Firestore collection path","Document data (JSON object)","Optional document ID (string)"],"input_types":["collection path (string)","document data (JSON object)","document ID (string, optional)"],"output_types":["document ID (string)","document snapshot (JSON object, optional)"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_2","uri":"capability://tool.use.integration.firebase.storage.file.upload.and.download.via.mcp.tools","name":"firebase storage file upload and download via mcp tools","description":"Exposes Firebase Storage operations (storage_upload_file, storage_download_file, storage_list_files) as MCP tools that handle file I/O through the Storage SDK. The upload tool accepts base64-encoded file content and a destination path, writes to Storage, and returns a public download URL. The download tool retrieves files by path and returns base64-encoded content. The list tool enumerates files in a Storage bucket with optional path prefix filtering. All operations include error handling for authentication failures, missing files, and quota exceeded scenarios, with results formatted as structured MCP responses.","intents":["I want an AI agent to upload generated files (reports, images, code) to Firebase Storage without direct SDK access","I need Claude to retrieve files from Storage and process their content as part of a workflow","I want to let an AI system manage file organization in Storage (listing, organizing by prefix)"],"best_for":["AI agents that generate and persist files (code generation, report creation, image processing)","Workflows combining Firestore data operations with file storage","Applications needing secure file access through AI without exposing Storage credentials"],"limitations":["Base64 encoding/decoding adds ~30% overhead for large files and limits practical file size to ~10MB per operation","No streaming support — entire file must be loaded into memory, making large file handling inefficient","No resumable upload support — network failures require full retry from the beginning","File listing returns only names and paths, not metadata (size, creation date, content type)","No built-in access control per file — all files accessible to the MCP server are accessible to all AI clients"],"requires":["Firebase project with Storage bucket initialized","Service account credentials with read/write access to Storage","Node.js 18+","Base64 encoding capability in client (for uploads)"],"input_types":["file path (string)","file content (base64-encoded string for uploads)","bucket prefix (string, optional for listing)"],"output_types":["download URL (string)","file content (base64-encoded string)","array of file paths (strings)","success confirmation (boolean)"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_3","uri":"capability://tool.use.integration.firebase.authentication.user.retrieval.and.metadata.access","name":"firebase authentication user retrieval and metadata access","description":"Exposes Firebase Authentication operations (auth_get_user, auth_list_users) as MCP tools that query the Firebase Auth service. The get_user tool retrieves a specific user's profile by UID or email, returning user metadata (creation date, last sign-in, email verification status, custom claims). The list_users tool enumerates all users in the project with pagination support. Both tools return sanitized user data (no password hashes or sensitive credentials) and include error handling for missing users or permission issues. The implementation uses the Firebase Admin SDK's Auth module to access user records.","intents":["I want an AI agent to look up user information (email, creation date, verification status) for workflow decisions","I need Claude to retrieve user metadata to personalize responses or validate user state","I want to let an AI system audit user accounts or generate user reports"],"best_for":["AI agents managing user-facing workflows (onboarding, account verification, user support)","Systems that need to validate user state before performing operations","Audit and reporting workflows that require user metadata"],"limitations":["No user creation or deletion through MCP tools — only read operations are exposed","No custom claims modification — user metadata is read-only","No password reset or email verification triggering — limited to querying existing state","Pagination limited to 1000 users per call; enumerating large user bases requires multiple calls","No filtering by user properties — list_users returns all users, requiring client-side filtering"],"requires":["Firebase project with Authentication enabled","Service account credentials with read access to Auth data","Node.js 18+"],"input_types":["user UID (string)","user email (string)","pagination token (string, optional)"],"output_types":["user object with uid, email, displayName, photoURL, emailVerified, createdAt, lastSignInTime","array of user objects","pagination token (string)"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_4","uri":"capability://tool.use.integration.mcp.transport.abstraction.with.http.and.stdio.support","name":"mcp transport abstraction with http and stdio support","description":"Implements a transport layer that supports both HTTP and STDIO protocols for MCP communication, allowing the Firebase MCP server to integrate with different AI client architectures. The server initializes with a configurable transport mechanism (via environment variable or constructor parameter), handles protocol-specific serialization/deserialization, and manages connection lifecycle. HTTP transport exposes the MCP server on a specified port with standard HTTP request/response handling, while STDIO transport reads from stdin and writes to stdout, enabling integration with CLI-based AI tools and local development environments. The transport abstraction is handled by the MCP SDK, with the Firebase server providing configuration and tool registration.","intents":["I want to run Firebase MCP as a local service that Claude Desktop or Cursor can connect to via HTTP","I need to integrate Firebase MCP into a CLI tool or script that communicates via STDIO","I want to deploy Firebase MCP as a containerized service that AI clients can reach over the network"],"best_for":["Developers integrating Firebase MCP with Claude Desktop or Cursor (HTTP transport)","Teams deploying Firebase MCP in containerized environments (Docker, Kubernetes)","CLI tool builders that need local Firebase access through STDIO"],"limitations":["HTTP transport requires network accessibility and firewall configuration; STDIO is limited to local processes","No built-in authentication or TLS support in HTTP transport — credentials must be managed externally","STDIO transport is single-connection only; multiple concurrent clients require multiple server instances","No connection pooling or load balancing — each client connection consumes server resources"],"requires":["Node.js 18+","MCP SDK (installed as dependency)","For HTTP: available port (default 3000 or configurable)","For STDIO: parent process that manages stdin/stdout"],"input_types":["MCP protocol messages (JSON)","tool call requests with parameters"],"output_types":["MCP protocol responses (JSON)","tool results with structured data"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_5","uri":"capability://automation.workflow.firebase.initialization.and.credential.management.via.environment.configuration","name":"firebase initialization and credential management via environment configuration","description":"Handles Firebase project initialization by reading service account credentials from environment variables or configuration files and initializing the Firebase Admin SDK. The FirebaseMcpServer constructor accepts a Firebase config object or reads from GOOGLE_APPLICATION_CREDENTIALS environment variable, validates the configuration, and initializes Firestore, Storage, and Auth service instances. The implementation follows Firebase Admin SDK patterns, creating singleton service instances that are reused across all tool handlers. Error handling includes validation of credential format, project ID verification, and graceful failure if Firebase services are unavailable.","intents":["I want to configure Firebase MCP to connect to my Firebase project without hardcoding credentials","I need to run Firebase MCP in different environments (local, staging, production) with different Firebase projects","I want to ensure Firebase credentials are securely loaded from environment variables or credential files"],"best_for":["DevOps engineers deploying Firebase MCP across environments","Developers setting up local development environments with Firebase","Teams managing multiple Firebase projects with environment-specific configuration"],"limitations":["Requires GOOGLE_APPLICATION_CREDENTIALS or explicit config object — no interactive credential setup","No credential rotation support — credentials must be manually updated and server restarted","No multi-project support — single server instance is bound to one Firebase project","Credential validation happens at startup; invalid credentials cause server startup failure with no graceful degradation"],"requires":["Firebase project with service account created","Service account JSON key file or GOOGLE_APPLICATION_CREDENTIALS environment variable","Node.js 18+","Firebase Admin SDK (installed as dependency)"],"input_types":["Firebase config object (JSON)","environment variable GOOGLE_APPLICATION_CREDENTIALS (file path)"],"output_types":["initialized Firebase app instance","Firestore, Storage, and Auth service instances"],"categories":["automation-workflow","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_6","uri":"capability://tool.use.integration.mcp.tool.registration.and.schema.based.parameter.validation","name":"mcp tool registration and schema-based parameter validation","description":"Implements a tool registration system where each Firebase operation (Firestore CRUD, Storage operations, Auth queries) is registered as a named MCP tool with a JSON schema that defines required parameters, types, and descriptions. The FirebaseMcpServer class registers tools using the MCP SDK's tool registration API (src/index.ts 477-1334), providing each tool with a schema that specifies parameter names, types (string, number, boolean, object), required fields, and descriptions. When an AI client calls a tool, the MCP framework validates parameters against the schema before invoking the handler, ensuring type safety and providing clear error messages for invalid inputs. The schema-based approach enables AI clients to discover available tools and their parameter requirements without documentation.","intents":["I want Claude to know what parameters each Firebase operation requires without reading documentation","I need to ensure AI clients can't call Firebase tools with invalid parameters","I want to provide clear error messages when an AI agent uses a tool incorrectly"],"best_for":["AI agents that need to discover available operations and their signatures","Systems requiring strict parameter validation before Firebase operations","Developers building MCP clients that need to understand tool capabilities"],"limitations":["Schema validation is basic type checking only — no custom validation logic per parameter","No conditional parameter requirements — all required parameters must be present regardless of context","Schema descriptions are static strings — no dynamic help or examples","No parameter transformation or normalization — clients must provide exact types specified in schema"],"requires":["MCP SDK with tool registration support","JSON schema definitions for each tool","Node.js 18+"],"input_types":["tool name (string)","parameters matching schema (JSON object)"],"output_types":["tool schema (JSON schema object)","list of available tools with schemas"],"categories":["tool-use-integration","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_7","uri":"capability://tool.use.integration.firestore.document.update.with.partial.data.merging","name":"firestore document update with partial data merging","description":"Implements firestore_update_document tool that performs partial document updates using Firestore's merge semantics. Unlike add/set operations that replace entire documents, the update tool accepts a partial data object and merges it with existing document fields, preserving unspecified fields. The implementation uses the Firestore SDK's update() method which applies field-level updates atomically, supporting nested field updates via dot notation (e.g., 'user.profile.name'). The tool validates that the document exists before updating and returns the updated document snapshot or an error if the document is not found.","intents":["I want an AI agent to modify specific fields in a Firestore document without overwriting other fields","I need to let Claude update nested document properties using dot notation","I want to ensure document updates are atomic and preserve existing data"],"best_for":["Workflows that need to modify specific document fields without full replacement","AI agents managing user profiles or configuration documents with partial updates","Systems requiring atomic field-level updates"],"limitations":["No array element updates — cannot update specific array indices, only replace entire arrays","No increment/decrement operations — numeric fields must be read, modified, and written back","No conditional updates — cannot apply updates only if a field matches a condition","Dot notation has limitations with array fields — cannot use array indices in update paths"],"requires":["Firestore document that already exists","Collection path and document ID","Partial data object with fields to update"],"input_types":["collection path (string)","document ID (string)","update data (partial JSON object with dot-notation support)"],"output_types":["updated document snapshot (JSON object)","success confirmation (boolean)"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_8","uri":"capability://safety.moderation.error.handling.and.structured.exception.translation.to.mcp.responses","name":"error handling and structured exception translation to mcp responses","description":"Implements comprehensive error handling across all Firebase operations, catching Firebase SDK exceptions (auth errors, permission denied, not found, quota exceeded) and translating them into structured MCP error responses. The error handling layer (src/index.ts 477-1334) wraps each tool handler in try-catch blocks, maps Firebase-specific error codes to human-readable messages, and returns error details in the MCP response format. Common error scenarios include missing documents (DOCUMENT_NOT_FOUND), permission failures (PERMISSION_DENIED), authentication issues (UNAUTHENTICATED), and quota limits (RESOURCE_EXHAUSTED). The implementation preserves error context (original error code, message) while providing clear guidance to AI clients about what went wrong.","intents":["I want AI agents to understand why a Firebase operation failed and handle errors gracefully","I need clear error messages when credentials are invalid or permissions are insufficient","I want to distinguish between transient errors (quota exceeded) and permanent failures (document not found)"],"best_for":["AI agents that need to handle Firebase operation failures and retry appropriately","Systems requiring detailed error context for debugging and monitoring","Workflows that need to distinguish between different failure modes"],"limitations":["Error messages are static strings — no dynamic context about which document/collection failed","No retry guidance — clients must implement their own retry logic","No error aggregation — multiple failures in a batch operation return only the first error","Limited error categorization — some Firebase errors map to generic 'unknown error' category"],"requires":["Firebase operations that may fail (missing documents, permission issues, quota limits)","MCP client that can handle error responses"],"input_types":["Firebase operation parameters"],"output_types":["error response with code and message (JSON object)","error context (original Firebase error details)"],"categories":["safety-moderation","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-gannonh-firebase-mcp__cap_9","uri":"capability://tool.use.integration.firestore.document.deletion.with.existence.validation","name":"firestore document deletion with existence validation","description":"Implements firestore_delete_document tool that removes documents from Firestore collections with optional existence checking. The tool accepts a collection path and document ID, validates that the document exists (optional), and executes the delete operation. The implementation uses Firestore's delete() method which is atomic and idempotent (deleting a non-existent document succeeds silently). The tool can be configured to fail if the document doesn't exist (strict mode) or succeed regardless (lenient mode), providing flexibility for different workflow requirements. Deletion is permanent and cannot be undone through the MCP interface.","intents":["I want an AI agent to remove documents from Firestore as part of a cleanup or archival workflow","I need to ensure a document is deleted only if it exists, failing otherwise","I want to let Claude delete user records or expired data"],"best_for":["Cleanup and archival workflows that need to remove old or invalid documents","AI agents managing data lifecycle (expiration, deletion)","Systems requiring document removal as part of user offboarding"],"limitations":["No cascade deletion — subcollections are not automatically deleted with parent documents","No soft delete support — deletion is permanent and cannot be recovered","No batch deletion — each document requires a separate tool call","No conditional deletion — cannot delete only if a field matches a condition"],"requires":["Firestore collection and document ID","Write permissions on the target document"],"input_types":["collection path (string)","document ID (string)"],"output_types":["success confirmation (boolean)","error message if document not found (optional)"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":36,"verified":false,"data_access_risk":"high","permissions":["Firebase project with Firestore database initialized","Service account JSON key or Firebase credentials configured via environment variables","Node.js 18+ runtime","MCP-compatible client (Claude, Cursor, VS Code with MCP support)","Firebase project with Firestore database","Service account credentials with read access to target collections","Node.js 18+","Firebase Storage bucket initialized","Read permissions on the bucket","Firestore collection path"],"failure_modes":["No built-in transaction support — each operation is atomic but multi-document transactions must be orchestrated by the client","No real-time listener support — only point-in-time reads and writes, no subscription-based updates","Filtering and querying limited to basic collection listing; complex WHERE clauses require client-side filtering of results","No batch operation optimization — bulk writes execute as individual tool calls, adding latency for large datasets","No support for complex queries (compound WHERE clauses, range queries, ordering) — filtering is field-equality only","No pagination cursor support — results are limited to a fixed page size, requiring multiple calls for large collections","Client-side filtering means all documents are fetched then filtered, causing performance degradation on large collections","No index awareness — complex queries that would benefit from composite indexes cannot be expressed","No recursive directory listing — prefix filtering is flat, not hierarchical","Metadata is limited to name, size, creation date, content type — no custom metadata","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.29512101746465125,"quality":0.34,"ecosystem":0.46,"match_graph":0.25,"freshness":0.6,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-05-24T12:16:22.065Z","last_scraped_at":"2026-05-03T14:23:38.364Z","last_commit":"2025-10-27T11:00:06Z"},"community":{"stars":244,"forks":42,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=mcp-gannonh-firebase-mcp","compare_url":"https://unfragile.ai/compare?artifact=mcp-gannonh-firebase-mcp"}},"signature":"YNcSa09OZ0FfyshFOhJJCu/mILvs3uDAkovmH5YfjHss5aRig2WT5Mf/L7UCPB70wE0AUYco3dT4ZOBckgKoAg==","signedAt":"2026-07-08T03:50:04.316Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/mcp-gannonh-firebase-mcp","artifact":"https://unfragile.ai/mcp-gannonh-firebase-mcp","verify":"https://unfragile.ai/api/v1/verify?slug=mcp-gannonh-firebase-mcp","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}