Enox Usage Examples

Note: Response shapes below are illustrative — actual results depend on graph coverage. The Enox graph currently covers ~2,600 papers across ML, NLP, Systems, SE, Graph, and Security.


Connect first

Add Enox to your MCP config before using any tool:

{
  "mcpServers": {
    "enox": {
      "type": "http",
      "url": "https://enox.dev/mcp"
    }
  }
}

search — find an entity by name

Intent: Before using any other tool, find the exact entity ID that Enox uses internally. Most tools accept a human-readable name and resolve it, but search lets you confirm what’s in the graph.

Invocation:

{ "query": "TransE", "limit": 5 }

Response shape:

{
  "results": [
    {
      "id": "paper:transe",
      "type": "paper",
      "title": "Translating Embeddings for Modeling Multi-relational Data",
      "year": 2013,
      "domain": "Graph",
      "citations": 12000
    },
    {
      "id": "concept:knowledge-graph-embedding",
      "type": "concept",
      "label": "Knowledge Graph Embedding"
    }
  ]
}

explore — all edges around a node

Intent: Understand what a paper or concept connects to — what it enables, extends, supersedes, or is superseded by.

Invocation:

{ "entity": "TransE" }

Response shape:

{
  "entity": {
    "id": "paper:transe",
    "type": "paper",
    "title": "Translating Embeddings for Modeling Multi-relational Data",
    "year": 2013
  },
  "outgoing": [
    "TransE --[supersedes]--> RESCAL  (conf: 0.85)",
    "TransE --[enables]--> Knowledge Graph Completion  (conf: 0.90)"
  ],
  "incoming": [
    "RotatE --[supersedes]--> TransE  (conf: 0.88)"
  ],
  "total_edges": 3
}

query_failures — when does X fail?

Intent: Understand known limitations before recommending a method. Useful for filtering candidates in decide — or for surfacing caveats before committing to an approach.

Invocation:

{ "entity": "TransE" }

Response shape:

{
  "entity": {
    "id": "paper:transe",
    "type": "paper",
    "title": "Translating Embeddings for Modeling Multi-relational Data"
  },
  "failures": [
    {
      "fails_on": "antisymmetric relations",
      "condition": "symmetric/antisymmetric",
      "confidence": 0.92
    },
    {
      "fails_on": "1-to-N relations",
      "condition": "multi-valued",
      "confidence": 0.87
    }
  ],
  "count": 2
}

compare — head-to-head

Intent: Compare two methods directly to understand which supersedes the other, or how they relate.

Invocation:

{ "a": "Adam", "b": "AdamW" }

Response shape:

{
  "a": {
    "id": "concept:adam",
    "type": "concept",
    "label": "Adam optimizer"
  },
  "b": {
    "id": "concept:adamw",
    "type": "concept",
    "label": "AdamW optimizer"
  },
  "relations": [
    {
      "direction": "AdamW → Adam",
      "rel": "supersedes",
      "note": "AdamW decouples weight decay from gradient update",
      "confidence": 0.91
    }
  ],
  "summary": "Found 1 relation(s)."
}

find_equivalent — alternatives

Intent: Find competing or structurally parallel approaches — methods that solve the same problem from a different angle.

Invocation:

{ "entity": "BERT" }

Response shape:

{
  "entity": {
    "id": "paper:bert",
    "type": "paper",
    "title": "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding",
    "year": 2018
  },
  "equivalents": [
    {
      "entity": {
        "id": "paper:roberta",
        "title": "RoBERTa: A Robustly Optimized BERT Pretraining Approach",
        "year": 2019
      },
      "rel": "isomorphic_to",
      "direction": "incoming",
      "confidence": 0.80
    },
    {
      "entity": {
        "id": "paper:xlnet",
        "title": "XLNet: Generalized Autoregressive Pretraining for Language Understanding",
        "year": 2019
      },
      "rel": "isomorphic_to",
      "direction": "incoming",
      "confidence": 0.75
    }
  ],
  "count": 2
}

check_obsolete — has this been superseded?

Intent: Avoid recommending outdated methods. Run this before citing a classic technique to see if something better has replaced it.

Invocation:

{ "entity": "word2vec" }

Response shape:

{
  "entity": {
    "id": "paper:word2vec",
    "type": "paper",
    "title": "Efficient Estimation of Word Representations in Vector Space",
    "year": 2013
  },
  "is_obsolete": true,
  "superseded_by": [
    {
      "superseded_by": {
        "id": "paper:glove",
        "title": "GloVe: Global Vectors for Word Representation",
        "year": 2014
      },
      "confidence": 0.76
    },
    {
      "superseded_by": {
        "id": "paper:bert",
        "title": "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding",
        "year": 2018
      },
      "confidence": 0.88
    }
  ],
  "supersedes": [],
  "summary": "This method has been superseded by 2 newer work(s)."
}

decide — ranked recommendations

Intent: Given a task and constraints, get ranked methods to try. Enox filters out candidates with known failures that match your constraints, then ranks survivors by their win edges.

Invocation:

{
  "task": "link prediction on knowledge graphs",
  "constraints": ["antisymmetric relations"],
  "limit": 5
}

Response shape:

{
  "task": "link prediction on knowledge graphs",
  "constraints": ["antisymmetric relations"],
  "recommendations": [
    {
      "rank": 1,
      "entity": {
        "id": "paper:rotate",
        "title": "RotatE: Knowledge Graph Embedding by Relational Rotation in Complex Space",
        "year": 2019
      },
      "score": 3.21,
      "wins": 2,
      "known_failures": 0
    },
    {
      "rank": 2,
      "entity": {
        "id": "paper:complex",
        "title": "Complex Embeddings for Simple Link Prediction",
        "year": 2016
      },
      "score": 2.87,
      "wins": 1,
      "known_failures": 1
    }
  ],
  "total_candidates": 34,
  "after_filtering": 28
}

TransE was filtered out because query_failures shows it fails on antisymmetric relations — exactly the constraint you specified.


Typical workflow

This is the pattern an AI agent would follow to answer “what should I use for X?”:

Step 1 — find entity IDs

search("raft consensus")

→ Returns paper:raft and concept:distributed-consensus

Step 2 — understand the landscape

explore("Raft")

→ Shows that Raft supersedes Paxos, enables etcd and CockroachDB

Step 3 — check if your baseline is outdated

check_obsolete("Paxos")

is_obsolete: true, superseded by Raft and Multi-Paxos variants

Step 4 — get ranked recommendations with constraints

decide("distributed consensus", constraints=["byzantine faults"])

→ Returns PBFT, HotStuff, Tendermint — filtered and ranked by wins in the relevant failure modes

By chaining these four calls, an agent gets a defensible, evidence-backed recommendation in seconds rather than spending tokens on open-ended search.