{"name":"io.github.cunicopia-dev/knowledge-graph-rdbms","slug":"cunicopia-dev-knowledge-graph-rdbms","title":"Knowledge Graph RDBMS","description":"A label property graph on SQLite/Postgres with multi-ontology routing and a gated MCP server.","url":"https://mcp.market/server/cunicopia-dev-knowledge-graph-rdbms","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"data","tags":["data"],"presence":{"score":21,"stars":1,"forks":0,"downloads_week":34,"last_push_at":"2026-08-09T16:56:15.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/cunicopia-dev/knowledge-graph-rdbms","website":null,"version":"0.1.9","remotes":[],"packages":[{"registryType":"pypi","identifier":"knowledge-graph-rdbms","version":"0.1.9","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"knowledge-graph-rdbms[mcp]","type":"named","name":"--from"},{"value":"kgrdbms-mcp","type":"positional"}],"environmentVariables":[{"description":"Storage root for ontology databases and the event log. Defaults to ~/.kgrdbms.","format":"string","name":"KGRDBMS_HOME"},{"description":"Name of the default ontology used when a tool call omits the `ontology` argument. Defaults to \"default\".","format":"string","name":"KGRDBMS_DEFAULT_ONTOLOGY"}]}],"tools":[{"name":"kg_descendants","description":"All nodes reachable from `id` by following only `edge_type` edges.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_edge_add","description":"Add an edge. Triples (from, type, to) are unique; repeats update properties.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_edge_remove","description":"Remove a specific edge by (from, type, to). Idempotent. Logged + reversible.","write_action":true,"price_micros":0,"input_schema":null},{"name":"kg_edges","description":"Edges of a node, optionally filtered by `edge_type`. `direction` is \"out\" (default), \"in\", or \"both\". Each result is the edge plus the node on the other end: {direction, id, from, to, type, properties, node}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_event_revert","description":"Reverse an event by emitting a compensating event. The original is never deleted.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_events_tail","description":"The most recent events from the append-only log.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_find","description":"Find nodes by `kind` and/or `label`, each tagged with its source ontology ([{ontology, node}]). Give a kind, a label, or both (both = nodes of that kind that also carry that label).","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_identity","description":"The materialized SAME_AS cluster of a node — every leaf node explicitly asserted (transitively) to be the same real-world entity, fetched live and tagged by ontology ([{ontology, node}]). Pairs with kg_link(type=SAME_AS).","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_import","description":"Bulk-create many nodes and edges in ONE call (one gated + logged transaction).","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_link","description":"Assert a typed relationship between nodes in two DIFFERENT ontologies (impossible as a normal edge — those can't cross files). For \"same real-world entity\", use type=\"SAME_AS\" with symmetric=True (read the cluster back with kg_identity). symmetric=True also writes the reverse. Gated + logged.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_links_of","description":"Every cross-ontology link touching a node (both directions).","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_neighborhood","description":"Undirected BFS from a node within `depth` hops (inclusive of self).","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_node_delete","description":"Delete a node (cascade removes its edges/properties).","write_action":true,"price_micros":0,"input_schema":null},{"name":"kg_node_get","description":"Fetch a node by id. One graph: returns the node, or null if absent.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_node_upsert","description":"Create or update a node — also the way to add labels or set properties (pass `labels=[...]` / `properties={...}`; both merge into the existing node). Properties are JSON-serializable.","write_action":true,"price_micros":0,"input_schema":null},{"name":"kg_ontologies_list","description":"List registered ontologies: name, backend engine, extraction stance, path.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_ontology_create","description":"Register a new ontology (or update an existing one's metadata).","write_action":true,"price_micros":0,"input_schema":null},{"name":"kg_ontology_delete","description":"Remove an ontology from the registry (inverse of kg_ontology_create).","write_action":true,"price_micros":0,"input_schema":null},{"name":"kg_prefix_add","description":"Bind a CURIE prefix to an IRI base (e.g. person -> https://kg.local/person/).","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_prefix_resolve","description":"Resolve the prefix/IRI registry. With `curie`, expand it to its full IRI ({curie, iri}); without, return every prefix -> IRI-base binding.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_rdf_export","description":"Serialize an ontology to RDF text (dependency-free).","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_rdf_import","description":"Load RDF text into an ontology through the gated + logged path (replayable).","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_replay","description":"Rebuild the graph projection from the event log.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_schema","description":"The observed schema — CALL THIS FIRST when you don't know what an ontology contains, before kg_find / kg_node_get. Returns the exact vocabulary so you never guess: kinds, edge types, labels, property keys per kind (+counts), and node/edge totals.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_shortest_path","description":"Shortest undirected path between two node ids, or None if no path.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_virtual_edge_add","description":"Bind an edge TYPE to a query that resolves its instances live from an external source — no rows are copied into the graph (Ontology-Based Data Access). At traversal time kg_edges runs `query`, parameterized by the node you're standing on, and synthesizes the edges; results carry `_virtual: true`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kg_virtual_edge_remove","description":"Remove a virtual-edge binding by type. The external source is untouched.","write_action":true,"price_micros":0,"input_schema":null},{"name":"kg_virtual_edges_list","description":"List the ontology's virtual-edge bindings (edge type, source, directions, target shape, and the query). The connection string is shown by reference (`dsn_env`) or literal (`dsn`) exactly as stored.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":88,"grade":"A","scanned_at":"2026-09-26T16:35:23.214Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T16:35:23.266Z","components":{"code":{"score":25,"max":25,"notes":["21 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":12,"max":15,"notes":["last push 48 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"knowledge-graph-rdbms","version":"0.1.9","found":true,"weeklyDownloads":34,"license":"MIT","dependencyCount":15,"publishedAt":"2026-06-25T12:11:18.348874Z","repositoryUrl":"https://github.com/cunicopia-dev/knowledge-graph-rdbms"}],"repo":{"found":true,"owner":"cunicopia-dev","repo":"knowledge-graph-rdbms","archived":false,"pushedAt":"2026-08-09T16:56:15Z","stars":1,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/112027862?v=4","ownerCreatedAt":"2022-08-24T21:20:19Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/112027862?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":34,"license":"MIT","lastPushAt":"2026-08-09T16:56:15.000Z","score":21}}}},"grade_history":[],"reviews":[]}