{
  "name": "Ganglion Fabric",
  "description": "Authenticated Cloudflare relay and scheduler for private, outbound-connected Dendrite inference nodes.",
  "url": "https://elasticinferencefabric.airanger.dev",
  "version": "0.2.0",
  "authentication": {
    "schemes": [
      "Fabric access token (bearer)",
      "same-site dashboard session cookie"
    ],
    "provisioning": "An administrator issues an individual token in the dashboard. Tokens are database-backed, expiring and revocable. Never share the bootstrap admin token.",
    "mcp": "Pre-provisioned bearer tokens; not an OAuth authorization server. Configure Authorization in your MCP client or use the provided stdio bridge."
  },
  "mcp": {
    "url": "https://elasticinferencefabric.airanger.dev/mcp",
    "transport": "streamable-http",
    "tools": [
      "fabric_resources",
      "fabric_models",
      "fabric_submit_task",
      "fabric_get_task"
    ]
  },
  "endpoints": {
    "submit_task": "https://elasticinferencefabric.airanger.dev/v1/tasks",
    "task_status": "https://elasticinferencefabric.airanger.dev/v1/tasks/{id}",
    "authenticated_inventory": "https://elasticinferencefabric.airanger.dev/v1/resources",
    "model_roster": "https://elasticinferencefabric.airanger.dev/v1/models",
    "openapi": "https://elasticinferencefabric.airanger.dev/openapi.json",
    "mcp": "https://elasticinferencefabric.airanger.dev/mcp"
  },
  "semantics": {
    "relay": "Prompts transit the Cloudflare Worker to a selected node; inference stays on that node.",
    "availability": "The public model roster describes intended roles, not live installation or availability.",
    "fallback": "There is no cloud inference fallback and simulated runtimes require allow_simulated=true.",
    "cache": "Prefix candidates are node-local placement hints, never portable cache artifacts."
  },
  "models": [
    {
      "id": "qwen3-0.6b",
      "name": "Qwen3 0.6B",
      "parameters": "0.6B",
      "role": "Intent routing",
      "capabilities": [
        "routing",
        "classify"
      ],
      "source_url": "https://huggingface.co/Qwen/Qwen3-0.6B"
    },
    {
      "id": "qwen2.5-coder-1.5b",
      "name": "Qwen2.5 Coder 1.5B",
      "parameters": "1.5B",
      "role": "Code analysis",
      "capabilities": [
        "code_analysis"
      ],
      "source_url": "https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct"
    },
    {
      "id": "smollm2-1.7b",
      "name": "SmolLM2 1.7B",
      "parameters": "1.7B",
      "role": "Summarization",
      "capabilities": [
        "summarize"
      ],
      "source_url": "https://huggingface.co/HuggingFaceTB/SmolLM2-1.7B-Instruct"
    },
    {
      "id": "qwen2.5-0.5b",
      "name": "Qwen2.5 0.5B",
      "parameters": "0.5B",
      "role": "Structured extraction",
      "capabilities": [
        "extract"
      ],
      "source_url": "https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct"
    },
    {
      "id": "qwen3-1.7b",
      "name": "Qwen3 1.7B",
      "parameters": "1.7B",
      "role": "Reasoning & judging",
      "capabilities": [
        "reasoning",
        "judge",
        "complete"
      ],
      "source_url": "https://huggingface.co/Qwen/Qwen3-1.7B"
    }
  ]
}