mcpg is an MCP server with 186 tools an agent can call, among them analyze_distance_metric, analyze_hnsw_recall, analyze_lock_hotspots. It answers at https://devopam-mcpg-demo.hf.space/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 10 times since 5 September 2026; the last check, on 18 October 2026, succeeded.
MCP server at devopam-mcpg-demo.hf.space, verified by introspection: 186 tools exposed.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
analyze_distance_metric | Recommend a pgvector distance metric (cosine | l2 | inner_product) from the embedding-magnitude distribution. Samples up to `sample_size` non-NULL rows of schema.table.column, computes each embedding's L2 norm, and applies a small heuristic Inputs: schema, table, column, sample_size, database |
analyze_hnsw_recall | Sweeps ef_search values to measure the latency and recall trade-off curve for a given pgvector query vector against exact brute-force ground truth. Requires the vector extension. Returns a list of objects with `ef_search`, `recall_at_k`, `m Inputs: schema, table, column, query_vector, k, metric |
analyze_lock_hotspots | Rank PG 19 `pg_stat_lock` rows by wait dominance and surface stable reason codes. Read-only — never modifies state. Pair with `find_blocking_chains` for the active culprits on a specific hot lock_type. Returns an object with `available` (bo Inputs: database |
analyze_mpp_query_plan | Run `EXPLAIN (ANALYZE, FORMAT JSON)` on `sql` and roll up MPP-specific facts: slice count, motion nodes (`Redistribute Motion` / `Broadcast Motion` / `Gather Motion`), and per-motion metadata (senders, receivers, estimated rows). Uses the s Inputs: sql, database |
analyze_query_plan | Summarise a query's execution plan: total estimated cost, estimated rows, node types used, and any sequentially-scanned tables. Set `io=true` to run `EXPLAIN (ANALYZE, BUFFERS, TIMING)` instead of the plan-only variant — adds `actual_total_ Inputs: sql, io, database |
analyze_rerank_ndcg | NDCG@k under bi-encoder ordering vs cross-encoder ordering, averaged across labeled queries (``ground_truth_relevance IS NOT NULL``). Reports the delta (cross - bi) — positive = the rerank is adding real ranking quality, negative = it's hur Inputs: days, k, model, retrieval_index, database |
analyze_rerank_score_distribution | Equal-width histogram of cross_encoder_score values over the window plus the top-decile share. Surfaces ``score_clustering`` (WARNING) when the reranker isn't discriminating (more than half of scores land in the top decile of the range). Re Inputs: days, model, retrieval_index, n_buckets, database |
analyze_reranker_lift | Per-query Spearman + Kendall correlation between bi-encoder and cross-encoder ranks, aggregated across queries in the window. Low correlation = the reranker is actively reordering (doing real work); high correlation = the reranker mostly co Inputs: days, model, retrieval_index, database |
analyze_session_cost | Surface hot-path inefficiencies from the audit log. Reads `mcpg_audit.events` over the last `lookback_minutes` (default 60, capped at 1440) and flags tools called more than `hot_threshold` times (default 10). Catalogue-listing tools (`list_ Inputs: lookback_minutes, hot_threshold, database |
analyze_table_bloat | Rank a schema's tables and indexes by estimated bloat, worst first. By default uses a cheap catalog-only estimate (relpages vs a reltuples/row-width floor) plus the dead-tuple ratio from pg_stat_user_tables. Set `precise=true` to use pgstat Inputs: schema, limit, precise, database |
analyze_topk_stability | Jaccard overlap between top-K-by-bi-rank and top-K-by-cross-rank per query, aggregated. High mean Jaccard means the reranker isn't actually changing the top-K membership. Surfaces ``topk_stable`` (WARNING) when the rerank is barely earning Inputs: days, k, model, retrieval_index, database |
analyze_vector_search_efficiency | Cross-backend retrieval-quality report for a pgvector or pg_turboquant ANN index. Detects the backend (HNSW / IVFFlat / turboquant), sweeps the matching per-backend knob (ef_search / probes / candidate_limit) across a multiplier curve, comp Inputs: schema, table, column, id_column, index_name, k |
analyze_workload | Return the slowest queries by mean execution time, via the pg_stat_statements extension. Reports availability=false if the extension is not installed. Example: `analyze_workload(limit=10)` Inputs: limit, database |
audit_database | Run a deep, comprehensive DBA-level database performance, logs, and health audit over the specified schema. Scans memory, checkpoints, temp file spills, contention locks, dead tuple cleanliness, and optionally scans custom logging tables. S Inputs: schema, log_table, database, fresh |
audit_sequences | Flag sequences nearing their ceiling — serial / identity / explicit sequences whose `last_value / max_value` exceeds `warning_pct` (default 80) or `critical_pct` (default 95). Sequence overflow is catastrophic and silent until the next `nex Inputs: warning_pct, critical_pct, database |
audit_settings | Sanity-sweep `postgresql.conf` via `pg_settings`. Flags dangerous toggles (`fsync=off`, `full_page_writes=off`, `autovacuum=off`, `synchronous_commit=off`), cross-setting issues (`maintenance_work_mem` < `work_mem`, tiny `shared_buffers`, l Inputs: total_ram_mb, database |
check_database_health | Run database health checks: connection utilisation, buffer cache hit ratio, tables needing vacuum, and invalid indexes. Returns an object with `status` ('ok' / 'warning' / 'critical') and `checks` (a list of `{name, status, detail}` per che Inputs: database |
check_pitr_readiness | Assess whether the cluster is ready for point-in-time recovery (PITR) — the one-call 'could I actually recover to an arbitrary point right now, and if not what's missing?' check. Composes `get_wal_archive_status` (5.2) with the GUCs that ga Inputs: database |
check_segment_health | Walk `gp_segment_configuration` and surface MPP segment posture. Returns per-segment `status` ('u' = up), `mode` ('s' = sync / 'n' = not-in-sync / 'c' = changetracking), and `role` vs `preferred_role` to detect post-failover state. Top-leve Inputs: database |
close_cursor | Close a server-side cursor and release its dedicated connection. Idempotent — returns closed=false when the cursor was not open (already closed, expired, or never existed). Inputs: cursor_id |
cluster_vectors | k-means cluster a pgvector column. Samples up to `sample_size` (default 5000) non-NULL rows of schema.table.embedding_column, runs Lloyd's algorithm with k-means++ seeding (`seed` for determinism), and returns `centroids` (one per cluster, Inputs: schema, table, embedding_column, k, id_column, sample_size |
compare_schemas | Return the structural diff between two schemas — tables/columns/indexes/constraints/foreign-keys added, removed, or changed. Base tables only; views and custom types are not compared. Renames surface as a paired add + remove. Example: `comp Inputs: left_schema, right_schema, database |
cross_table_similarity | Find the k rows in target_schema.target_table most similar to a specific row in source_schema.source_table. Locates the source row via source_id_column = source_id_value, reads its embedding from source_embedding_column, then issues a pgvec Inputs: source_schema, source_table, source_embedding_column, source_id_column, source_id_value, target_schema |
describe_ao_table | Describe append-optimized (AO) / append-optimized columnar (AO/CO) storage metadata for one table: row vs column orientation, `compression_type`, `compression_level`, `block_size`, `checksum`. Reads `pg_appendonly`. Returns `is_ao=false` cl Inputs: schema, table, database |
describe_graph | Describe the schema structure, vertex labels, and edge labels of a specific property graph. Returns an object with `graph_name`, `vertex_labels`, and `edge_labels`. Inputs: graph_name |
describe_property_graph | Describe one SQL/PGQ property graph by schema-qualified name. Requires PG 19+; raises an error otherwise. Useful when an agent has located a graph via `list_property_graphs` and needs the full membership before composing a `run_pgq` query. Inputs: schema, name, database |
describe_redis_cache_table | Describe one foreign table backed by ``redis_fdw``: which server it's mapped to, the Redis-side key structure (`hash` / `list` / `string` / `set` / `zset`), key-prefix, TTL, and SQL-side column shape. Raises an error when the table doesn't Inputs: schema, table, database |
describe_self | Return a high-level summary of what mcpg can do, organised into capability buckets (schema introspection, query execution, vector search, RAG telemetry, audit trail, migrations, time-series, etc.). Call this first when discovering mcpg's su |
describe_table | Describe the columns of a table, in ordinal order. Set `fresh=true` to bypass the cache and re-read live (e.g. after a schema change). Returns a list of objects with `name`, `data_type`, `nullable`, `default`, and `vector_dimension` (set on Inputs: schema, table, database, fresh |
describe_tool | Return the full registered schema for one MCP tool by name — `description`, `input_schema`, `output_schema`, and which capability bucket it belongs to. Use this when an agent hits a tool error and needs to verify the call shape without re-w Inputs: name |
detect_n_plus_one | Surface query templates in pg_stat_statements that look like an N+1 loop: hundreds of calls, each returning at most a row or two, with meaningful total wall-clock time spent. Returns the candidates sorted by total time descending so the wor Inputs: min_calls, max_rows_per_call, min_total_ms, limit, database |
detect_vector_outliers | Flag pgvector rows whose embedding sits far from any cluster centroid. Samples up to `sample_size` (default 5000) non-NULL rows of schema.table.embedding_column, clusters them with k-means (same engine as `cluster_vectors`), then per cluste Inputs: schema, table, embedding_column, id_column, k, zscore_threshold |
explain_query | Return the PostgreSQL execution plan for a query. By default uses `EXPLAIN (FORMAT JSON)` — plan only, the query is not executed. Set `io=true` to switch to `EXPLAIN (ANALYZE, BUFFERS, TIMING)` — runs the query and includes buffer + I/O tim Inputs: sql, io, database |
export_query | Run a read-only SQL query and serialise its rows to CSV or JSON. Reuses the SQL-safety checks of run_select. Truncates at `limit` rows and flags it in the result so callers can paginate. Example: `export_query(sql='SELECT id, email FROM use Inputs: sql, format, limit, database |
export_table | Serialise every row in schema.table (up to `limit`) to CSV or JSON. Schema and table names must be plain identifiers. Returns an object with `format`, `row_count`, `truncated` (bool — true when the row count hit `limit`), and `content` (the Inputs: schema, table, format, limit, database |
fetch_cursor | Fetch the next batch from an open server-side cursor. exhausted=true means the FETCH returned fewer rows than requested — stop polling. batch_size defaults to 100; hard cap is 10000 per call. Inputs: cursor_id, batch_size |
find_blocking_chains | Return (blocked, blocking) backend pairs via pg_blocking_pids. Each row pairs a backend waiting on a Lock with one PID holding the lock that's preventing progress. Cycles are possible (A blocks B, B blocks A); render with care. Read-only. Inputs: limit, database |
find_sensitive_columns | Flag columns whose names or types look like they hold sensitive data (passwords, tokens, PII, financial info, health records). Pure heuristic — no row sampling, no value introspection. Categories: credential, financial, contact, identifier, Inputs: schema, database |
find_unused_objects | Find tables and indexes with zero scans since pg_stat was last reset — a strong signal of dead code, but NOT a verdict. Tables report seq+idx scan counts, write counts, and estimated row count; indexes report size and definition. Excludes P Inputs: schema, database |
full_text_search | Rank a text column's documents against a full-text query using PostgreSQL's built-in tsvector/tsquery. The query accepts web-search syntax (quoted phrases, or, - exclusion). Returns a list of objects with the matched row's primary key colum Inputs: schema, table, column, search_query, config, limit |
fuzzy_search, generate_diesel_schema, generate_drizzle_schema, generate_ecto_schemas, generate_ent_schemas, generate_fk_cascade_graph, generate_graph_diagram, generate_graph_projection, generate_jooq_config, generate_prisma_schema, generate_schema_diagram, generate_schema_docs, generate_sqlalchemy_models, generate_sqlc_schema, generate_test_data, generate_test_row_for, geo_search, get_aio_status, get_compact_schema, get_current_wal_lsn, get_data_checksums_status, get_database_ddl, get_logical_replication_status, get_metrics_exposition, get_pg19_ddl_status, get_pg19_partitions_status, get_pg19_stats_status, get_pg_search_index_metadata, get_pgq_status, get_prewarm_extension_status, get_redis_cache_stats, get_repack_status, get_role_ddl, get_server_info, get_skip_scan_status, get_tablespace_ddl, get_turboquant_heap_stats, get_turboquant_index_metadata, get_turboquant_last_scan_stats, get_wait_for_lsn_status, get_wal_archive_status, get_warehousepg_status, hybrid_bm25_vector_search, hybrid_search, lint_naming_conventions, list_active_queries, list_audit_events, list_autowarm_jobs, list_available_extensions, list_chunks, list_composite_types, list_constraints, list_cron_jobs, list_cursors, list_databases, list_distribution_policies, list_domains, list_enums, list_extensions, list_foreign_data_wrappers, list_foreign_keys, list_foreign_servers, list_foreign_tables, list_functions, list_generated_columns, list_grants, list_graphs, list_hypertables, list_indexes, list_locks, list_partitions, list_pg_search_indexes, list_policies, list_prewarmed_relations, list_property_graphs, list_publications, list_redis_foreign_servers, list_replicas, list_resource_groups, list_roles, list_schemas, list_sequences, list_subscriptions, list_tables, list_triggers, list_turboquant_indexes, list_user_mappings, list_views, migrate_vector_to_halfvec, mmr_search, monitor_embedding_drift, monitor_index_build, open_cursor, optimize_query, pg_search_more_like_this, pg_search_parse_query, pg_search_run, read_autovacuum_priority, read_migration_history, read_pg_buffercache_relations, read_pg_buffercache_summary, read_pg_stat_io, read_pg_stat_lock, read_pg_stat_recovery, read_pg_wal_records, read_pg_wal_stats, recommend_efficiency_thresholds, recommend_headline_tools, recommend_hnsw_ef_search, recommend_index_drops, recommend_indexes, recommend_io_method, recommend_ivfflat_probes, recommend_pg_search_maintenance, recommend_postgres_conf, recommend_prewarm_targets, recommend_read_your_writes, recommend_redis_cache_targets, recommend_redistribute, recommend_rerank_strategy, recommend_skip_scan_indexes, recommend_turboquant_maintenance, recommend_turboquant_query_knobs, recommend_vector_quantization, retrieve_with_context, run_advisors, run_analytical_query, run_cypher, run_pgq, run_select, run_select_parallel, run_select_tuned, summarize_table, test_rls_for_role, translate_nl_to_sql, tune_vector_index, turboquant_approx_candidates, turboquant_rerank_candidates, vector_range_search, vector_recall_at_k, vector_search, verify_audit_chain, verify_connection_encryption, wait_for_lsn, walk_blocking_chains, why_is_this_slow
Every block below points at https://devopam-mcpg-demo.hf.space/mcp. Pick your client and copy.
claude mcp add --transport http mcpg https://devopam-mcpg-demo.hf.space/mcp
{
"mcpServers": {
"mcpg": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://devopam-mcpg-demo.hf.space/mcp"]
}
}
}{
"mcpServers": {
"mcpg": {
"url": "https://devopam-mcpg-demo.hf.space/mcp"
}
}
}{
"servers": {
"mcpg": {
"type": "http",
"url": "https://devopam-mcpg-demo.hf.space/mcp"
}
}
}{
"context_servers": {
"mcpg": {
"url": "https://devopam-mcpg-demo.hf.space/mcp"
}
}
}{
"mcpServers": {
"mcpg": {
"serverUrl": "https://devopam-mcpg-demo.hf.space/mcp"
}
}
}{
"mcpServers": {
"mcpg": {
"url": "https://devopam-mcpg-demo.hf.space/mcp"
}
}
}name: mcpg
version: 0.0.1
schema: v1
mcpServers:
- name: mcpg
type: streamable-http
url: https://devopam-mcpg-demo.hf.space/mcp{
"mcpServers": {
"mcpg": {
"httpUrl": "https://devopam-mcpg-demo.hf.space/mcp"
}
}
}{
"mcpServers": {
"mcpg": {
"type": "http",
"url": "https://devopam-mcpg-demo.hf.space/mcp"
}
}
}{
"mcpServers": {
"mcpg": {
"url": "https://devopam-mcpg-demo.hf.space/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fdevopam-mcpg-demo.hf.space%2Fmcp&type=streamable_http&id=mcpg&name=mcpg
It answered our last check on 18 October 2026 in 518 ms. Over 10 checks since 5 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by hf.space and served from devopam-mcpg-demo.hf.space, the vendor's own domain: https://devopam-mcpg-demo.hf.space/mcp.
186, as returned by the server's own tools/list on 5 September 2026: analyze_distance_metric, analyze_hnsw_recall, analyze_lock_hotspots, analyze_mpp_query_plan, analyze_query_plan, analyze_rerank_ndcg, analyze_rerank_score_distribution, analyze_reranker_lift, and 178 more.
It answered our last check on 18 October 2026 in 518 ms. Over 10 checks since 5 September 2026 it answered 6.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://devopam-mcpg-demo.hf.space/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: devopam-mcpg-demo.hf.space. Endpoint host: devopam-mcpg-demo.hf.space. ARD identifier: urn:air:devopam-mcpg-demo.hf.space:mcp:mcpg.
First indexed 5 September 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.