Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,558Letters: 14Defects: 1,331counted 4 min ago
teppi

Server definition

Hash
sha256:5ad04927f82ce41a24f6341e05423aecee0bae0018d5cc42d200eee64e62b70d
What it is
What a remote MCP server returned when asked what it offers: 19 tools

The blob, as servednamed by its sha256

{ "instructions": "Myriade is an AI-native data platform. Use these tools to explore and query databases managed by Myriade. Start with myriade_list_databases to see available connections, then use myriade_list_tables and myriade_get_table_schema to understand the data before querying. Use myriade_ask to have Myriade's data analyst agent answer complex analytical questions about a database; long analyses keep running in the background — poll myriade_get_answer with the returned conversation_id until the answer is ready. For recurring metrics (dashboards, cockpits), prefer myriade_get_query_results with a saved query ID over resending SQL: the query stays versioned and governed in Myriade (myriade_query saves the query and returns its query_id). Use the catalog tools (myriade_search_catalog, myriade_read_asset, myriade_update_asset) to browse and maintain data documentation.", "tools": [ { "description": "Ask a natural language question about a database using Myriade's\ndata analyst agent.\n\nThe agent will explore the database schema, search the catalog, run SQL\nqueries, and analyze the results to answer your question. Use this for\ncomplex analytical questions that require multiple steps; for simple\nschema lookups or direct SQL, prefer the other tools.\n\nThe run executes in the background as a regular Myriade conversation\n(visible in the web UI). If it finishes quickly the answer is returned\ndirectly; otherwise the tool returns ``{\"status\": \"running\",\n\"conversation_id\": ...}`` — poll myriade_get_answer with that id to\nretrieve the result. Long analytical questions are expected to take\nseveral minutes.\n\nNote: the agent has access to catalog write operations (create/update\nassets, tags, terms) — it may modify catalog state to record findings.\nIt can also read, create and edit reports (ask it to \"write a report\non ...\" or \"update report <id> with ...\"). Use myriade_query directly\nfor strictly read-only inspection.\n\nRequires AI_PROVIDER and the corresponding API key (e.g.\nAI_PROVIDER=anthropic + ANTHROPIC_API_KEY).\n", "inputSchema": { "properties": { "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "question": { "description": "Natural-language question about the data", "maxLength": 4000, "minLength": 1, "title": "Question", "type": "string" } }, "required": [ "database_id", "question" ], "title": "askArguments", "type": "object" }, "name": "myriade_ask", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "askOutput", "type": "object" } }, { "description": "Retrieve the result of a myriade_ask run.\n\nReturns ``{\"status\": \"completed\", \"answer\": ...}`` once the analyst\nagent has answered, or ``{\"status\": \"running\"}`` while it is still\nworking — keep polling in that case. ``{\"status\": \"failed\"}`` /\n``{\"status\": \"quota_exceeded\"}`` carry the run's error. ``{\"status\":\n\"no_answer\"}`` means the run is gone without a recorded answer (agent\nstopped silently, or the server restarted): start a new myriade_ask run.\n", "inputSchema": { "properties": { "conversation_id": { "description": "Conversation UUID returned by myriade_ask", "format": "uuid", "title": "Conversation Id", "type": "string" }, "wait_seconds": { "default": 20, "description": "How long to wait for the run to finish before reporting its status (long-poll)", "maximum": 30, "minimum": 0, "title": "Wait Seconds", "type": "integer" } }, "required": [ "conversation_id" ], "title": "get_answerArguments", "type": "object" }, "name": "myriade_get_answer", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_answerOutput", "type": "object" } }, { "description": "Get a monitoring check (name, SQL, severity, cadence, status) and its\nmost recent run results, newest first.\n\nOn governed databases the SQL and evidence rows are redacted unless you\nmanage the database or authored the proposal.\n", "inputSchema": { "properties": { "check_id": { "description": "UUID of the monitoring check", "format": "uuid", "title": "Check Id", "type": "string" }, "limit": { "default": 20, "description": "Run results to return (1-100)", "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "check_id" ], "title": "get_checkArguments", "type": "object" }, "name": "myriade_get_check", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_checkOutput", "type": "object" } }, { "description": "Get detailed information about a specific database connection.\n\nReturns information about the database including its name, engine type,\ndescription, write mode, and any AI memory notes.\n", "inputSchema": { "properties": { "database_id": { "description": "UUID of the database (from myriade_list_databases)", "format": "uuid", "title": "Database Id", "type": "string" } }, "required": [ "database_id" ], "title": "get_database_infoArguments", "type": "object" }, "name": "myriade_get_database_info", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_database_infoOutput", "type": "object" } }, { "description": "Re-execute a saved Myriade query and return fresh results.\n\nThe query's SQL always re-runs under the caller's governance policies\n(table permissions, column masking) — results are never served from\nMyriade's cached snapshot.\n\nPrefer this over myriade_query for recurring metrics (dashboards,\ncockpits): the SQL stays governed in Myriade instead of travelling\nthrough prompts. Write statements are blocked. Returns up to 50 rows\nwith column metadata, same shape as myriade_query.\n", "inputSchema": { "properties": { "query_id": { "description": "UUID of a saved Myriade query (from a Myriade query link, e.g. in myriade_ask responses)", "format": "uuid", "title": "Query Id", "type": "string" } }, "required": [ "query_id" ], "title": "get_query_resultsArguments", "type": "object" }, "name": "myriade_get_query_results", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_query_resultsOutput", "type": "object" } }, { "description": "Get the column-level schema for a specific table.\n\nReturns column names, data types, and descriptions for the table,\nplus the SQL `dialect` to use with myriade_query on this database.\nWhen the name is ambiguous across schemas, the candidates are returned\nunder `matches` instead — pass `schema_name` to pick one.\nRaises if the user has no access to the table under governance.\n", "inputSchema": { "properties": { "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "schema_name": { "anyOf": [ { "maxLength": 255, "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional schema name to disambiguate same-named tables", "title": "Schema Name" }, "table_name": { "description": "Name of the table to inspect", "maxLength": 255, "minLength": 1, "title": "Table Name", "type": "string" } }, "required": [ "database_id", "table_name" ], "title": "get_table_schemaArguments", "type": "object" }, "name": "myriade_get_table_schema", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_table_schemaOutput", "type": "object" } }, { "description": "List databases configured in Myriade (paginated, sorted by name).\n\nReturns paginated database connections with their IDs, names, engines,\nand descriptions. Use the database ID with other tools.\n", "inputSchema": { "properties": { "limit": { "default": 50, "description": "Maximum results to return (1-200)", "maximum": 200, "minimum": 1, "title": "Limit", "type": "integer" }, "offset": { "default": 0, "description": "Number of results to skip for pagination", "minimum": 0, "title": "Offset", "type": "integer" } }, "title": "list_databasesArguments", "type": "object" }, "name": "myriade_list_databases", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "list_databasesOutput", "type": "object" } }, { "description": "List or search reports (documents) written in Myriade.\n\nWithout ``query`` returns the most recently updated reports first; with\n``query`` returns the best matches first. Only reports the caller may see\nare returned. Read one with myriade_read_report.\n", "inputSchema": { "properties": { "database_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "default": null, "description": "UUID of the database whose reports to list. Omit for organisation-level reports (not bound to a database).", "title": "Database Id" }, "limit": { "default": 20, "description": "Maximum results to return (1-50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "query": { "anyOf": [ { "maxLength": 200, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional search terms (title, description, content); results are ranked by relevance", "title": "Query" } }, "title": "list_reportsArguments", "type": "object" }, "name": "myriade_list_reports", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "list_reportsOutput", "type": "object" } }, { "description": "List tables in a database (paginated, sorted by database/schema/name).\n\nReturns a flat, paginated list of tables. Each item has database_name,\nschema, and name fields. The response's `dialect` is the SQL dialect\nto use with myriade_query on this database.\n", "inputSchema": { "properties": { "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "limit": { "default": 100, "description": "Maximum tables to return (1-500)", "maximum": 500, "minimum": 1, "title": "Limit", "type": "integer" }, "offset": { "default": 0, "description": "Number of tables to skip for pagination", "minimum": 0, "title": "Offset", "type": "integer" } }, "required": [ "database_id" ], "title": "list_tablesArguments", "type": "object" }, "name": "myriade_list_tables", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "list_tablesOutput", "type": "object" } }, { "description": "Snapshot of a database's monitoring board: check count, standing alerts\n(open / acknowledged / known) with their headlines, recent notifications\nand triage notes, followed by the open alerts as JSON — each with its\ninvestigation and evidence while they fit, then as listing lines, with\n``shown`` / ``total`` / ``detailed`` saying which.\n\nAlert ids feed myriade_triage_alert; check ids feed myriade_get_check.\nInvestigation details are redacted unless you manage the database.\n", "inputSchema": { "properties": { "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" } }, "required": [ "database_id" ], "title": "monitoring_overviewArguments", "type": "object" }, "name": "myriade_monitoring_overview", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "monitoring_overviewOutput", "type": "object" } }, { "description": "Propose a monitoring check for the user to review in Myriade.\n\nThis creates a PROPOSAL, never an active check: nothing runs until a\ndatabase owner or org admin accepts it in the app. The SQL is test-run\nonce under your governance context to validate it.\n\nContract for ``check_sql``: it MUST return rows ONLY when something is\nwrong (zero rows = healthy) and use relative time (``now() - interval``),\nnever absolute dates. Minimum cadence is 5 minutes. Names are unique per\ndatabase — read myriade_monitoring_overview before proposing a\nnear-duplicate.\n", "inputSchema": { "properties": { "check_sql": { "description": "SQL returning zero rows when healthy, rows when wrong", "maxLength": 20000, "minLength": 1, "title": "Check Sql", "type": "string" }, "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "description": { "default": "", "description": "One sentence, prospective tense: \"Trips when <condition> (baseline ~X)\"", "maxLength": 2000, "title": "Description", "type": "string" }, "interval_minutes": { "default": 60, "description": "Cadence in minutes (minimum 5)", "minimum": 5, "title": "Interval Minutes", "type": "integer" }, "kind": { "description": "What the check guards: freshness (data arriving on time), volume (row counts, drops, spikes), integrity (duplicates, orphans, keys), quality (nulls, negatives, malformed values), business (a business rule or KPI threshold)", "enum": [ "freshness", "volume", "integrity", "quality", "business" ], "title": "Kind", "type": "string" }, "name": { "description": "Short human-readable name of the thing watched, unique per database, no type prefix (the kind carries it)", "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "severity": { "default": "MEDIUM", "description": "Severity raised when the check trips", "enum": [ "LOW", "MEDIUM", "HIGH", "CRITICAL" ], "title": "Severity", "type": "string" } }, "required": [ "database_id", "name", "check_sql", "kind" ], "title": "propose_checkArguments", "type": "object" }, "name": "myriade_propose_check", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "propose_checkOutput", "type": "object" } }, { "description": "Execute a read-only SQL query against a database.\n\nWrite the SQL in the dialect of the target database's engine — see the\n`dialect` field returned by myriade_list_tables and\nmyriade_get_table_schema, or the engine in myriade_list_databases.\nWrite operations (INSERT, UPDATE, DELETE, DROP, etc.) are blocked.\nReturns up to 50 rows of results with column metadata. Successful\nqueries are saved in Myriade; the response's `query_id` can be\nreplayed later with myriade_get_query_results without resending SQL.\n", "inputSchema": { "properties": { "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "sql": { "description": "Read-only SQL query, written for the target database's dialect (writes are blocked)", "maxLength": 20000, "minLength": 1, "title": "Sql", "type": "string" }, "title": { "anyOf": [ { "maxLength": 255, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional name for the saved query, shown in Myriade", "title": "Title" } }, "required": [ "database_id", "sql" ], "title": "queryArguments", "type": "object" }, "name": "myriade_query", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "queryOutput", "type": "object" } }, { "description": "Get detailed information about a catalog object (table, column, schema,\nor glossary term — assets and terms share one id space).\n\nReturns the asset's description, tags, status, columns (for tables),\nsample data, parent hierarchy, and activity feed; for a glossary term,\nits definition, synonyms, related terms, and activity feed.\n", "inputSchema": { "properties": { "asset_id": { "description": "UUID of the catalog object (asset or glossary term)", "format": "uuid", "title": "Asset Id", "type": "string" }, "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" } }, "required": [ "database_id", "asset_id" ], "title": "read_assetArguments", "type": "object" }, "name": "myriade_read_asset", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "read_assetOutput", "type": "object" } }, { "description": "Read a report's full markdown content.\n\nApplies the same visibility rule as the web app; a report the caller may\nnot see returns a \"not found\" error. To create or edit a report, use\nmyriade_ask — the analyst agent knows how reports are structured.\n", "inputSchema": { "properties": { "document_id": { "description": "UUID of the report (from myriade_list_reports)", "format": "uuid", "title": "Document Id", "type": "string" } }, "required": [ "document_id" ], "title": "read_reportArguments", "type": "object" }, "name": "myriade_read_report", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "read_reportOutput", "type": "object" } }, { "description": "Propose a catalog change for the data team to review (no edit rights needed).\n\nCreates a reviewable suggestion routed to the asset's reviewers. Does NOT\nchange the published catalog until approved.\n\nUse this instead of ``myriade_update_asset`` when you lack edit rights or\nare not confident enough to write directly.\n", "inputSchema": { "properties": { "asset_id": { "description": "UUID of the asset to propose a change for", "format": "uuid", "title": "Asset Id", "type": "string" }, "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "field": { "description": "Field to change: \"description\" or \"tags\"", "enum": [ "description", "tags" ], "title": "Field", "type": "string" }, "proposed_value": { "description": "Proposed description text, or JSON-encoded list of tag names", "maxLength": 10000, "title": "Proposed Value", "type": "string" }, "rationale": { "description": "Why this change is proposed — shown to reviewers and in the activity feed", "maxLength": 2000, "title": "Rationale", "type": "string" } }, "required": [ "database_id", "asset_id", "field", "proposed_value", "rationale" ], "title": "request_catalog_changeArguments", "type": "object" }, "name": "myriade_request_catalog_change", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "request_catalog_changeOutput", "type": "object" } }, { "description": "Get sample rows from a table to understand the data.\n\nReturns a random sample of up to ``limit`` rows (max 20).\n", "inputSchema": { "properties": { "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "database_name": { "anyOf": [ { "maxLength": 255, "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional warehouse-side database name (e.g. for Snowflake)", "title": "Database Name" }, "limit": { "default": 10, "description": "Rows to sample (1-20)", "maximum": 20, "minimum": 1, "title": "Limit", "type": "integer" }, "schema_name": { "description": "Schema containing the table", "maxLength": 255, "minLength": 1, "title": "Schema Name", "type": "string" }, "table_name": { "description": "Name of the table to sample", "maxLength": 255, "minLength": 1, "title": "Table Name", "type": "string" } }, "required": [ "database_id", "table_name", "schema_name" ], "title": "sample_dataArguments", "type": "object" }, "name": "myriade_sample_data", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "sample_dataOutput", "type": "object" } }, { "description": "Search the data catalog for tables, columns, or terms by name/description.\n\nUses fuzzy matching and full-text search. Keep queries short\n(1-2 words) for best results.\n", "inputSchema": { "properties": { "asset_type": { "anyOf": [ { "enum": [ "TABLE", "COLUMN", "TERM" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "Filter: \"TABLE\", \"COLUMN\", or \"TERM\"", "title": "Asset Type" }, "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "limit": { "default": 20, "description": "Maximum results to return (1-50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "text": { "description": "Search query — keep short (1-2 words) for best results", "maxLength": 200, "minLength": 1, "title": "Text", "type": "string" } }, "required": [ "database_id", "text" ], "title": "search_catalogArguments", "type": "object" }, "name": "myriade_search_catalog", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "search_catalogOutput", "type": "object" } }, { "description": "Triage an alert (requires manage access: database owner or org admin).\n\n- ``resolve``: the underlying problem is handled or gone.\n- ``acknowledge``: keep it standing with a ``statement`` of what is\n happening — only for a situation that may worsen.\n- ``dismiss``: false positive / expected; refused while the check still\n trips (it would just respawn).\n- ``snooze``: silence for ``hours`` with a ``statement``; reopens by itself\n if the check still trips afterwards.\n- ``reopen``: send a parked alert back to \"needs action\" with a\n ``statement`` of what is no longer covered.\n", "inputSchema": { "properties": { "action": { "description": "Transition to apply to the alert", "enum": [ "resolve", "acknowledge", "dismiss", "snooze", "reopen" ], "title": "Action", "type": "string" }, "alert_id": { "description": "UUID of the alert", "format": "uuid", "title": "Alert Id", "type": "string" }, "hours": { "anyOf": [ { "maximum": 168, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Snooze window in hours (1-168). Required for snooze.", "title": "Hours" }, "note": { "anyOf": [ { "maxLength": 2000, "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional note appended to the alert details (resolve, dismiss)", "title": "Note" }, "statement": { "anyOf": [ { "maxLength": 500, "type": "string" }, { "type": "null" } ], "default": null, "description": "One SHORT present-tense plain-text sentence (~120 chars, no Markdown) shown as the alert headline. Required for acknowledge, snooze and reopen.", "title": "Statement" } }, "required": [ "alert_id", "action" ], "title": "triage_alertArguments", "type": "object" }, "name": "myriade_triage_alert", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "triage_alertOutput", "type": "object" } }, { "description": "Update a catalog asset's documentation (requires edit rights).\n\n- ``description`` replaces the existing description (auto-sets status to\n \"draft\" if status is null).\n- ``tag_ids`` replaces all tags (accepts names or UUIDs; auto-creates\n missing tags).\n- ``status`` is \"draft\" (needs review) or \"published\". Only use\n \"published\" with high confidence.\n\nUse ``myriade_request_catalog_change`` instead when you lack edit rights\nor are not confident enough to write directly.\n", "inputSchema": { "properties": { "asset_id": { "description": "UUID of the asset to update", "format": "uuid", "title": "Asset Id", "type": "string" }, "database_id": { "description": "UUID of the database", "format": "uuid", "title": "Database Id", "type": "string" }, "description": { "anyOf": [ { "maxLength": 10000, "type": "string" }, { "type": "null" } ], "default": null, "description": "Replaces existing description; auto-sets status='draft' if status is null", "title": "Description" }, "status": { "anyOf": [ { "enum": [ "draft", "published" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "\"draft\" (needs review) or \"published\" (production-ready)", "title": "Status" }, "tag_ids": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 50, "type": "array" }, { "type": "null" } ], "default": null, "description": "Tag names or UUIDs (replaces all tags). Auto-creates missing tags.", "title": "Tag Ids" } }, "required": [ "database_id", "asset_id" ], "title": "update_assetArguments", "type": "object" }, "name": "myriade_update_asset", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "update_assetOutput", "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:5ad04927f82ce41a24f6341e05423aecee0bae0018d5cc42d200eee64e62b70d | sha256sum