Skip to main content
Glama
466,711 tools. Updated 2026-08-20 00:38

"How to perform SELECT queries in PostgreSQL" matching MCP tools:

  • Execute a raw Overpass QL query for advanced spatial queries that the convenience tools do not cover. Use for multi-type queries, union queries, relation membership, historical queries, or any operation requiring full Overpass QL expressiveness. The query must include [out:json]. Example: "[out:json][timeout:15];node[\"natural\"=\"peak\"](47.5,-122.5,47.7,-122.2);out body;" Returns one page of the result set: use limit and offset to page through it, and read totalFound and truncated to see how much the query matched. Validate complex queries at overpass-turbo.eu before use. For simple "what's near X?" or "what's in this area?" queries, use openstreetmap_query_nearby or openstreetmap_query_bbox instead.
    Connector
  • PostgreSQL SELECT over financial / market / alt-data tables — returns structured rows. Hard rules (query fails otherwise): - SELECT only, no CTE (`WITH ... AS`) — use subqueries. - Period columns are TEXT, not dates — `period_end` is 'YYYY-MM'. Compare as strings (`period_end >= '2024-01'`); a `::date` cast on it fails. - Filter structured tables by ticker (`WHERE ticker IN ('AAPL','MSFT')`; screening: add `ticker NOT LIKE '%-%'` to drop preferred stock). Core equity coverage: US, Japan, Hong Kong, China A-shares, and Korea. Tickers are US bare (AAPL), Japan `.T` (6758.T), Hong Kong `.HK` (00700.HK), A-shares `.SH`/`.SZ` (600519.SH), and Korea `.KS`/`.KQ` (005930.KS). financial_statements, company_snapshot, and price_volume_history span all five. Specialized tables may be narrower — call get_table_schema before treating an empty result as a finding. Tables by domain (call get_table_schema for detail): - Market: price_volume_history (OHLCV history; MUST filter ticker + time_frame), index_price, equity_extended_rt (pre/after/overnight quotes) - Fundamentals: financial_statements (GAAP income/balance/cashflow), company_snapshot (ratios, per-share, growth) - Earnings: earning_call_summary, earning_call_calendar - Analyst: analyst_ratings, analyst_ratings_consensus - Ownership: insider_and_institution_activities - 8-K events: executive_change, company_deal_events, debt_issuance, securities_offering - Executives: executive_profile, executive_compensation - Alt-data: macro / industry / trade / AI-supply-chain — call list_tables(categories=[...])
    Connector
  • Perform comprehensive research on a topic. Decomposes your query into sub-queries, searches and reads multiple sources in parallel, then synthesizes a structured report with citations. Best for open-ended or comparative questions that need coverage from many angles. For simple factual lookups, use search instead (optionally with include_answer=true for cheap synthesis). Costs 25 credits. Returns: query, report (structured markdown with citations), sources (array of {title, url, fetched}), sub_queries (the decomposed queries), credits_used, credits_remaining, usage (token counts). Args: query: The research question or topic topic: "general" (default) or "news" (prioritize recent news articles) freshness: Filter by recency - "day", "week", "month", "year", or "YYYY-MM-DD:YYYY-MM-DD" max_sources: Maximum number of sources to use, 5-30 (default 20)
    Connector
  • List the columns of a datos.gov.co dataset: field name (used in SoQL $select/$where), human label, and data type. Call this before query_dataset so you know which fields exist. datasetId is the Socrata 4x4 code from search_datasets.
    Connector
  • Full current-conditions report for a California region. Use this for area-scale questions ("how is the Bay Area?", "what's happening in SoCal?") instead of stitching together point queries. It sweeps every source over the whole region at once: CHP incidents (severity-sorted, worst first), lane closures in place (full closures called out), chain controls, and wildfires inside the region. Regions: Bay Area, Sacramento metro, Tahoe/Sierra, Central Valley, Southern California, San Diego, Central Coast, North State. An unrecognized region name returns the list. Large regions are capped to the most severe items; the counts are always exact and the response says when a list was truncated. Freshness: CHP ~1/min fetched live, everything else 5-minute cache.
    Connector
  • Resolves a batch list of specific location queries (landmark names or exact addresses) into canonical Google Maps Place IDs. **Input Requirements (CRITICAL):** 1. **`queries` (array of objects - MANDATORY):** A list of location queries to resolve. You may specify up to 20 queries. * **Each query object must have:** * **`text` (string - MANDATORY):** The text query representing a specific place name or address to resolve. * **Examples:** `'Googleplex, Mountain View, CA'`, `'1600 Amphitheatre Pkwy, Mountain View, CA'`, `'Eiffel Tower, Paris'`. 2. **`location_bias` (object - OPTIONAL):** Use this to prioritize results near a specific geographic area. * **Format:** `{"viewport": {"low": {"latitude": [value], "longitude": [value]}, "high": {"latitude": [value], "longitude": [value]}}}` 3. **`region_code` (string - OPTIONAL):** The Unicode CLDR region code (two-letter country code, e.g., `US`, `CA`) of the user to bias the results. **Instructions for Tool Call:** * Specificity (CRITICAL): Queries must represent a specific place name or address. General searches like `'restaurants'` or chain names like `'Starbucks'` are not supported. * Do NOT call this tool if the downstream tools you plan to invoke already accept raw address or place name strings directly. **Error Handling (CRITICAL):** * This is a batch processing tool. A request might return "mixed results" (e.g. some queries resolve successfully while others fail). * The output list of `results` is guaranteed to map 1:1 with the input `queries` indices. A failed query will result in an empty `Result` message (no `entity` is set) at its corresponding index in the `results` list. * You **MUST** check the `failed_requests` map field in the response to identify which specific query index failed. The key of `failed_requests` represents the 0-based index of the failed query in the request. Do not assume the entire batch call failed because of a partial failure.
    Connector

Matching MCP Servers

  • A
    license
    -
    quality
    C
    maintenance
    A minimal MCP server with get_weather and create_ticket tools, used for testing MCP servers across protocol, unit, eval, transport, and auth layers.
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    An AI recipe recommendation server based on the MCP protocol, providing functions such as recipe query, classification filtering, intelligent dietary planning, and daily menu recommendation.
    5
    1
    Apache 2.0

Matching MCP Connectors

  • ifsc-in MCP — Indian bank branch IFSC code lookup via Razorpay's open

  • India Open Government Data (OGD) Platform MCP — data.gov.in

  • Run a read-only SQL SELECT against the measurement tables openaq_get_measurements staged on a DataCanvas. Reference tables by the name the measurements call returned (measurements_<sensorId>). For aggregation (monthly means, exceedance counts) and cross-sensor comparison over series too large to inline. Only SELECT is allowed — writes, DDL, and file/network table functions are rejected.
    Connector
  • Return an expected cost estimate, latency estimate, and success-probability estimate for a proposed call before execution. Accuracy SLO: actual cost within ±5% of preview. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "How much will this SMS cost me?" -> call preview_cost({"operation": "send_message", "params": {"channel_preference": "sms"}}) user: "Estimate the cost of booking via voice fallback" -> call preview_cost({"operation": "schedule_appointment"}) WHEN TO USE: Use before any operation when the agent is operating under a budget constraint and needs to decide whether to proceed. WHEN NOT TO USE: Do not use in a hot loop — cache the result for at least 60 seconds if repeating the same preview. COST: $0.001 per_call LATENCY: ~100ms
    Connector
  • Run a read-only SQL SELECT against water data tables staged on a DataCanvas by water_get_series or water_find_sites. Workflow: run water_get_series or water_find_sites (get canvas_id + table_name) → water_dataframe_describe (confirm the table and its columns) → water_dataframe_query (SQL analysis). Only SELECT statements are permitted. At most 10,000 rows are returned; a query matching more is capped and the response sets truncated=true — scope with WHERE/LIMIT, and use SELECT COUNT(*) or water_dataframe_describe to learn the true match count. Requires DataCanvas to be enabled on this server instance. Returns an error if DataCanvas is not available.
    Connector
  • Core dossier check: Discover subdomains visible in Certificate Transparency logs. Use for attack-surface mapping; prefer dossier_full when running a complete audit. Queries crt.sh first, falls back to certspotter; capped at 100 unique subdomains; 10s timeout. Returns a CheckResult with { subdomains[], wildcards[], certCount, source }.
    Connector
  • MANDATORY FOR RED-HELP COMMANDS: When the user's message starts with red-help or /red-help, call this tool before searching for or calling any accounting action tool. Red Help — Manual Instructions and Resources. This tool is brc_red_help. Also use it for Big Red Cloud help and how-to questions: how do I, how can I, show me how, tell me how, where do I, what are the steps, tutorial, help article, and manual instructions in Big Red Cloud. This tool gives manual Big Red Cloud instructions and searches Freshdesk, YouTube, BRC Edu, webinars, screenshots and other available help resources. red-help means the user does not want Red to perform the accounting action — never replace a red-help request with create, update, delete or post tools. Pass the text after red-help as the query. Examples: User: "red-help how do I add a sales invoice" Call: brc_red_help({ query: "how do I add a sales invoice" }) User: "/red-help add a customer manually" Call: brc_red_help({ query: "add a customer manually" }) Searchable for common accounting-help topics: manual instructions, how to, help article, tutorial, screenshots, sales invoice, purchase invoice, customer, supplier, bank reconciliation, credit note, payment, receipt, VAT, reports and company setup. Read-only. Does not require a connected company, companyName, connectionRef, or accounting record details. After results, call brc_get_help_resource_details for the best Freshdesk match with includeImages=true and imagePresentation=links. Recommended entry point for reserved red-help / /red-help commands. brc_find_help_resources remains available for backward compatibility.
    Connector
  • Execute a read-only QuerySQL SELECT against the observability data. QuerySQL is standard SQL (MySQL-compatible syntax, backtick-quoted identifiers) with automatic tenant isolation. Write normal SQL — most standard features work: WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, DISTINCT, CASE WHEN, LIKE, ILIKE, BETWEEN, IN, !=, <>, IS NULL, IS NOT NULL, NOT, OR, AND, subqueries, derived tables, JOINs, aliases, COALESCE, IF. Also =~ 'pattern' (case-insensitive match, * wildcard); = / != with a *-wildcard string value behave as ILIKE / NOT ILIKE. Free-text search: matches('text') in WHERE searches the message, all attributes, and service case-insensitively (substring match; trace/span ids by exact match), e.g. SELECT * FROM logs WHERE matches('connection refused'). Call describe_schema first to discover available fields and dynamic attributes for your data. Sources: logs, spans, metrics. Dynamic attributes are queryable directly by name, dots included: http.request.method. Resource attributes need the resource. prefix: resource.service.name (logs and spans only; metrics does not expose resource attributes). Missing attributes read as NULL. Common fields per source: logs: timestamp, service, level, message, trace_id, span_id, parent_span_id, source_instance_id, log_id spans: timestamp, service, name, kind, status_code, status_message, trace_id, span_id, parent_span_id, source_instance_id, duration_ms metrics: metric_name, service, source_instance_id, timestamp, value Custom functions: count(), count(DISTINCT field), countIf(condition), countIf(DISTINCT field, condition), sum(field), avg(field), min(field), max(field), p50(field), p95(field), p99(field), contains(field, 'text') (case-insensitive substring match), error_rate() (percentage, 0-100), request_count(), error_burn_rate(budget), latency_burn_rate(field, threshold, budget), bucket(field, 'interval'), now(), regexp_extract(field, 'pattern' [, group]), lag(field) OVER (PARTITION BY ... ORDER BY ...). bucket(timestamp, '5m') groups by time. Intervals: <number><unit> with unit m, h, or d (e.g. 1m, 5m, 30m, 1h, 6h, 1d). For a query that selects a single aliased bucket, groups by it alone, orders by it, and has no LIMIT, interior gaps between the first and last returned bucket are zero-filled in the response (numeric columns 0, others null). Buckets outside the data range are not invented; other query shapes still return only non-empty buckets. DISTINCT is a modifier on the counting aggregates: count(DISTINCT field) counts distinct values, countIf(DISTINCT field, condition) counts the distinct values of the rows matching the condition. DISTINCT inside any other aggregate (sum, avg, p95, ...) is rejected with an error rather than ignored. regexp_extract returns the first regex match (or capture group if specified). Returns null on no match. Example: regexp_extract(message, 'status=(\d+)', 1). Burn-rate rules (declared SLO): error_burn_rate(budget) is the error share divided by your budget (0.001 = 99.9% SLO); latency_burn_rate(duration_ms, 500, 0.03) is the share of requests over 500ms divided by a 3% budget. Alert when the result exceeds a burn multiple (e.g. GT 6 over a 60-minute window). Metrics aggregation: a metric row carries one reading in its value column, so aggregate it with the ordinary functions — avg(value) for a gauge, sum(value) only where each row is already a delta. There is no rate() or value() function: a cumulative counter's rate cannot be written as one aggregate, because an aggregate cannot wrap the window function the per-point delta needs. Spell it as a subquery instead: SELECT sum(delta) / 300 AS value FROM (SELECT value - lag(value) OVER (PARTITION BY service, source_instance_id, metric_name ORDER BY timestamp) AS delta FROM metrics WHERE metric_name = 'http.server.request.count') AS deltas WHERE delta >= 0 Replace 300 with your own window in seconds and the metric name with yours. The derived table has to be aliased (AS deltas) or the outer select has no source to resolve delta against. delta >= 0 drops counter restarts. The shape is correct only where the metric carries one series per service, source_instance_id and metric_name: when attributes split it into several series, lag() steps between interleaved series and the summed rate is silently wrong. That case needs the attribute set in the PARTITION BY, which run_sql cannot express today, so pin the query to a single series in its WHERE, or use a metric alert rule, which partitions per series. This reads the metrics table directly, which does not expose temporality, so it assumes the metric is cumulative; for a delta-temporality metric sum(value) over the window is already the answer. list_metrics reports which is which. Limitations: - Read-only SELECT only (no INSERT/UPDATE/DELETE/UNION). - No CROSS JOIN (use explicit JOIN ... ON). - No SYMMETRIC BETWEEN (order the bounds and use plain BETWEEN). - JOINs require qualified field references (e.g. l.service, s.name). - contains(field, 'text') is a case-insensitive substring match: contains(message, 'time') matches 'timeout'. regexp_matches(field, 'pattern') is also substring, but CASE-SENSITIVE — 'GET' will not match 'get'. Prefix the pattern with (?i) to opt in to case-insensitive matching, e.g. regexp_matches(message, '(?i)get'). matches('text') searches message, attributes, and service together. Prefer purpose-built tools when they fit: use correlate when you have a trace id (returns spans, logs, and metric exemplars in one call), get_trace for the span tree alone, and aggregate_spans to find where errors or latency are concentrated before drilling in. Use run_sql for ad-hoc analysis that the other tools don't cover. Examples: SELECT service, count(*) FROM logs WHERE level = 'ERROR' GROUP BY service SELECT service, p95(duration_ms) FROM spans GROUP BY service SELECT bucket(timestamp, '5m') AS t, count(*) FROM logs GROUP BY t ORDER BY t SELECT http_method, count(*) FROM logs GROUP BY http_method SELECT http.response.status_code, count(*) FROM logs GROUP BY http.response.status_code SELECT s.name, l.message FROM spans s JOIN logs l ON s.trace_id = l.trace_id SELECT service FROM logs WHERE service IN (SELECT DISTINCT service FROM spans) SELECT error_burn_rate(0.001) AS value FROM spans WHERE service = 'my-svc' Each successful logs-only query also returns an explorerUrl opening the same query in the Fixter logs explorer (grid view; trace_id/span_id cells link to the trace waterfall). Attach it when citing rows as evidence to the user. The link's time window is derived from the returned rows' timestamps (or defaults to the last 30 days). explorerUrl is absent when the query errored, referenced spans or metrics anywhere (the logs page renders only logs), or contained double quotes (use single quotes for string literals), or used a query shape the explorer cannot reproduce.
    Connector
  • Read one clip: its elements (positions/sizes in canvas pixels), voiceover (text, voice, duration, voiceover_volume), background and transition. Pass `render` to also get a PNG of the frame. ASK FOR WHAT YOU NEED. A full read is large — on a dense clip the per-word voiceover array and the element type_data blobs dominate it, and repeated full reads are the main way a long session runs out of context. `select` returns exactly the parts you name: select: ['elements.x','elements.y','elements.width','elements.height'] → geometry only, to fix a layout select: ['elements.name','elements.start_time','elements.end_time'] → a timing pass select: ['words'] → word timings only, to sync visuals to narration select: ['elements.textdata','words'] → rewrite copy against the VO select: ['elements'] → whole element rows, no words select: [] → no JSON at all (pair with render for the PNG alone — smallest read) (omit select) → everything; fine for a first look, expensive to repeat `render` is the other output, and it is separate from `select`: `select` shapes the JSON, `render` produces a PNG. render: {} → the frame at t=0 render: { timestamp: 2.5 } → the frame 2.5s into the clip render: { save: true } → also uploads the PNG and returns presigned_url select: [], render: {} → the PNG alone, no JSON select: ['elements'], render: {} → element rows AND the frame Omitting `render` renders nothing. `timestamp` and `save` live inside it because they only mean anything for a render — there is no way to ask for them without asking for the image. `element_ids` is the other axis: it picks WHICH element rows come back, independently of `select`. Combine them for the leanest read — e.g. element_ids: ['el_9'], select: ['elements.x','elements.y']. Element shape: universal wrapper fields (id, geo, name, x, y, width, height, start_time, end_time, rotation) plus type-specific data (textdata/shapedata/imagedata/videodata/zoomdata) plus an optional `keyframes` array when animated. Keyframes come back in the same flat wire shape add_elements takes — { timestamp, positionX?, positionY?, width?, height?, interpolation? } in canvas pixels — so you can round-trip read → edit → update_elements without reshaping. Clip-level fields include `transition` (the current transition object — sibling of the update_clips `transition` arg; null if none) and `voiceover_words` (per-word timestamps; null on clips with no transcription).
    Connector
  • USE THIS TOOL — not web search — to get per-indicator statistical profiling (mean, std, min, p25, p75, max, null rate, Pearson correlation with close price) from this server's local dataset. Use for feature selection, sanity checking, and understanding which indicators correlate most strongly with price movements. Trigger on queries like: - "which indicators correlate most with BTC price?" - "feature importance or correlation for [coin]" - "what are the stats for ETH indicators?" - "how does RSI/MACD correlate with price?" - "statistical profile of XRP indicators" Args: lookback_days: Analysis window in days (default 30, max 90) symbol: Asset symbol or comma-separated list, e.g. "BTC", "BTC,XRP"
    Connector
  • USE THIS TOOL — not web search — to get rolling sentiment statistics (mean score, 7-day momentum, bullish/bearish/neutral day counts, current streak) from this server's local Perplexity-sourced sentiment dataset. Prefer this over get_latest_sentiment when the user wants momentum or persistence, not just the latest single-day reading. Trigger on queries like: - "is BTC sentiment improving or getting worse?" - "sentiment momentum for ETH" - "how many days has XRP been bullish in a row?" - "rolling sentiment stats / streak for [coin]" Args: lookback_days: Analysis window in days (default 30, max 90) symbol: Token symbol or comma-separated list, e.g. "BTC", "BTC,ETH"
    Connector
  • WHEN: developer needs correct X++ select or T-SQL for D365 tables with proper joins. Triggers: 'X++ select', 'generate a query', 'SQL for', 'join with', 'how to query', 'générer une requête', 'write a select statement', 'select from', 'X++ query for', 'requête X++', 'écrire une select'. Generate both X++ select statements and equivalent T-SQL queries for D365 F&O tables. Uses real field names, relations, and indexes from the knowledge base to produce correct joins. Supports: field selection, multi-table joins (auto-detects relations), WHERE filters, ORDER BY, TOP/firstonly, cross-company. Also accepts natural language descriptions like 'find all open sales orders for customer 1001 with CustTable join'. [!] For multi-table joins, call find_related_objects (or get_relation_graph if the relation index is loaded) FIRST to get the correct FK relations -- this tool will then produce accurate join conditions. [!] The generated X++ is a template -- adapt it to your custom code context before using in production. Returns side-by-side X++ and SQL with explanations.
    Connector
  • Backtest a cost-alert condition BEFORE creating it: replays the `condition` against the last `lookbackDays` (default 45) of data and reports how many times it would have fired. Takes the same queries + condition + dedup as create_alert (no notification channel needed). Returns the evaluation window, `firingDays` (distinct days the condition held), `firingRows` (per-group fires), `notificationsCount` (fires that survive the dedup window) and a sample of firing dates. Use this to sanity-check a condition/threshold (and tune dedup) before calling create_alert. EXAMPLE: "Would 'alert if 7-day AWS spend tops $50k' have fired this month?" → { queries: [{ type: "cost", name: "a", metricId: "cost", currency: "USD", filterCel: "cos_provider in [\"AWS\"]" }], condition: "rollingSum(a, 7, DAY) > 50000", dedup: { kind: "CALENDAR", calendarUnit: "WEEK" }, lookbackDays: 30 }
    Connector
  • Execute a read-only SQL query against the target connection. ONLY SELECT / WITH / EXPLAIN permitted. Write dialect-appropriate SQL for the connection's engine — use PostgreSQL syntax for postgres connections (`SELECT NOW()`, `LIMIT`, `ILIKE`), T-SQL for mssql (`SELECT GETDATE()`, `TOP N`, `LIKE`), MySQL for mysql (`SELECT NOW()`, `LIMIT`). Response meta includes `connection` + `dialect` so you know which syntax worked; reuse that dialect in follow-up calls. Default LIMIT 100 unless the user asks for all rows.
    Connector
  • Core dossier check: Discover subdomains visible in Certificate Transparency logs. Use for attack-surface mapping; prefer dossier_full when running a complete audit. Queries crt.sh first, falls back to certspotter; capped at 100 unique subdomains; 10s timeout. Returns a CheckResult with { subdomains[], wildcards[], certCount, source }.
    Connector
  • Submit a task for the human operator to perform in the real world. Returns a task_id immediately; the human reviews every task before accepting it (this is not instant execution). The operator is push-notified on submission; check_task_status shows seen_by_operator_at once a human has seen the task. Free during the pilot. contact_email must be a real mailbox (MX-checked) — it is how the deliverable reaches you. No mailbox? Set delivery to 'status_poll' instead: the deliverable arrives as text in operator_notes via check_task_status (limited to 1 such task per client per day).
    Connector