Skip to main content
Glama

FanOracle: Comic Book Edition

AI-powered comic book authentication, grading, and valuation — secured on the Casper blockchain.

Built for the Casper Network Hackathon | MCP + Odra/Rust Smart Contract


Contract repo: https://github.com/ffffffffhugfadil/fanoracle-comic

🏆 What is FanOracle?

FanOracle is a Model Context Protocol (MCP) server that brings AI intelligence to comic book collecting. Upload a photo of any comic — raw or CGC-slabbed — and FanOracle will:

  1. Identify the comic title, issue, publisher, and year from the cover or CGC label

  2. Grade the condition using the CGC 0.5–10.0 scale

  3. Verify CGC/CBCS slab authenticity (detect fakes)

  4. Check if it's a key issue (first appearances, deaths, origins)

  5. Price it using real eBay sold listings

  6. Store it permanently on the Casper blockchain


Related MCP server: Casper Agentic Portfolio Copilot

🛠️ Tech Stack

Layer

Technology

Smart Contract

Rust + Odra Framework 2.7.0

Blockchain

Casper Network Testnet

AI Vision

Groq Llama 4 Scout (Vision)

Market Data

eBay Browse API (Production)

Comic Database

Comic Vine API

Interface

MCP Server + Claude Desktop


📦 Smart Contract

Deployed on Casper Testnet:

Field

Value

Contract Hash

contract-24ca090961cafb32c6cb39bd6034d175c8e47002e1e32c20e8cf54ca9abb8d40

Package Hash

contract-package-279e6175282d814b28c02157feacea538a6d3ba4c76bb1b21b4c110d57e92d8a

Deploy Hash (v2)

2d624cd2e18b98c321e5799c24b52e90695cd2cb6ec8c1fd6c6caead9ef677ca

Network

casper-test

Entry Points:

  • init — Initialize contract

  • add_comic(title, issue, grade_x10, is_key, value_cents) — Add comic to collection

  • get_count() — Get total comics in collection

  • get_comic_title(id) — Get comic title by ID

  • get_comic_grade(id) — Get comic grade by ID

  • get_comic_value(id) — Get comic estimated value by ID

  • get_comic_is_key(id) — Check if comic is key issue


🔧 MCP Tools (5 Tools)

1. grade_comic

AI-powered comic grading from photo. Reads CGC/CBCS label automatically.

Input: image_url or image_base64
Output: grade (0.5-10.0), condition, defects, slab detection, creator credits

2. verify_slab

Fake CGC/CBCS slab detector using AI visual analysis.

Input: image_url + cert_number
Output: authenticity score (0-100), red flags, green flags, verdict, CGC lookup URL

3. fetch_comic_price

Real market prices from eBay sold listings.

Input: title, issue_number, grade (optional)
Output: min/max/avg price, sample listings, sales count

4. detect_key_issue

Key issue detection via Comic Vine database.

Input: title, issue_number, publisher
Output: is_key_issue, key_reasons, first_appearances, cover_date

5. collection_value

Casper blockchain collection tracker + value estimator.

Input: action (get_count | add_comic | value_estimate), comics[]
Output: on-chain count, deploy_hash, total value, breakdown

🎬 Demo Flow

1. 📸 Upload CGC slab photo
      ↓
2. 🤖 grade_comic → "Wolverine #76, CGC 8.5, White Pages, Authentic"
      ↓
3. 🔍 verify_slab → "AUTHENTIC — Score 98/100, Hologram ✅"
      ↓
4. 🔑 detect_key_issue → "Lady Deathstrike & Puck appearance"
      ↓
5. 💰 fetch_comic_price → "Avg $40 | 20 eBay sales"
      ↓
6. ⛓️ collection_value (add_comic) → "Stored on Casper blockchain ✅"

🚀 Setup

Prerequisites

  • Node.js 18+

  • Claude Desktop

  • API Keys: Groq, eBay (Production), Comic Vine

Install

git clone https://github.com/your-repo/fanoracle-mcp
cd fanoracle-mcp
npm install
cp .env.example .env
# Fill in API keys in .env
npm run build

Claude Desktop Config

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "fanoracle": {
      "command": "node",
      "args": ["/path/to/fanoracle-mcp/dist/index.js"],
      "env": {
        "CASPER_RPC": "https://node.testnet.casper.network/rpc",
        "CASPER_CHAIN": "casper-test",
        "CONTRACT_HASH": "contract-24ca090961cafb32c6cb39bd6034d175c8e47002e1e32c20e8cf54ca9abb8d40",
        "GROQ_API_KEY": "your_groq_key",
        "EBAY_CLIENT_ID": "your_ebay_client_id",
        "EBAY_CLIENT_SECRET": "your_ebay_client_secret",
        "COMIC_VINE_API_KEY": "your_comic_vine_key"
      }
    }
  }
}

📊 Example Outputs

grade_comic

{
  "detected_title": "Amazing Spider-Man",
  "detected_issue_number": "300",
  "is_slabbed": true,
  "grading_company": "CGC",
  "certified_grade": 9.2,
  "grade_label": "Near Mint-",
  "confidence": "high",
  "hologram_detected": true,
  "slab_integrity": "intact",
  "notable_features": ["White Pages", "1st Full Venom Appearance"]
}

verify_slab

{
  "verdict": "AUTHENTIC",
  "authenticity_score": 98,
  "confidence": "high",
  "green_flags": ["Correct label font", "Hologram present", "Grade position correct"],
  "red_flags": [],
  "cgc_lookup_url": "https://www.cgccomics.com/certlookup/details/?certInput=3944834002"
}

fetch_comic_price

{
  "title": "Amazing Spider-Man",
  "issue_number": "300",
  "grade": "9.2",
  "sales_found": 20,
  "price_avg": 774.85,
  "price_min": 349.99,
  "price_max": 3300.00,
  "currency": "USD"
}


🌐 Live Demo

https://fanoracle.vercel.app


Built with ❤️ for the Casper Network Hackathon*

Available Tools

5 tools
collection_valueA

Calculate the total estimated value of a comic collection stored on the Casper blockchain. Optionally add or query comics from the on-chain registry.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesget_count: read comic count from chain | add_comic: add a comic to blockchain | value_estimate: estimate total collection value
comicsNoList of comics to value (required for value_estimate)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description mentions actions (get_count, add_comic, value_estimate) but lacks details on behavioral traits like write effects of add_comic, required authentication, or potential side effects. Basic transparency but insufficient for a tool with write operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with main purpose. No redundant information. Efficiently conveys core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given three distinct actions and no output schema, the description lacks information about return values, prerequisites, and how add_comic interacts with the blockchain. Incomplete for a multi-action tool without richer context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with enum descriptions for action and field descriptions for comics. The tool description adds minimal extra meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it calculates total estimated value of a comic collection on Casper blockchain, with optional add/query. It distinguishes from sibling tools (e.g., fetch_comic_price, grade_comic) by focusing on collection-level valuation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for collection valuation but does not explicitly state when to use this tool vs alternatives (e.g., fetch_comic_price for individual prices). No guidance on when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_key_issueC

Check whether a comic issue is a 'key issue' (first appearance, origin, death, etc.) using the Comic Vine database.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesComic series title, e.g. 'Amazing Spider-Man'
publisherNoPublisher name, e.g. 'Marvel'
issue_numberYesIssue number, e.g. '300'

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It states use of Comic Vine database but does not disclose return type, potential failures, auth needs, or performance implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words, but could be restructured to front-load key information more effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks output description; a 'check' tool likely returns a boolean or explanation, but it's not stated. No output schema exists to compensate. Missing context about data freshness or external dependencies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with clear descriptions. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the action ('check whether') and the resource ('comic issue is a key issue'), with examples of events. It is clear and distinct from sibling tools like fetch_comic_price or grade_comic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool over alternatives. It does not mention prerequisites, limitations, or appropriate contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_comic_priceA

Fetch recent sold prices for a comic book from eBay. Returns min, max, and average sale price.

ParametersJSON Schema
NameRequiredDescriptionDefault
gradeNoCGC/CBCS grade, e.g. '9.8'. Omit for raw copies.
titleYesComic title, e.g. 'Amazing Spider-Man'
issue_numberYesIssue number, e.g. '300'

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must fully disclose behavior. It specifies the data source (eBay) and output fields (min, max, average), which is transparent. However, it omits important details like rate limits, staleness of data, or authentication requirements, leaving gaps for a production tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence of 19 words that conveys purpose and output with zero waste. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains return values (min, max, average). It lacks currency and time range details but covers the essential functionality. The three parameters are fully described in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all three parameters described). The description adds no extra meaning beyond the schema; it only mentions return values. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Fetch'), the resource ('recent sold prices for a comic book from eBay'), and the output (min, max, average sale price). It distinguishes from sibling tools like 'grade_comic' or 'verify_slab' by its specific focus on pricing data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for price research but provides no explicit guidance on when to use this tool versus alternatives (e.g., 'collection_value' for portfolio pricing). No when-not-to-use or prerequisite information is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grade_comicA

Analyze a comic book image and estimate its condition grade (0.5–10.0 CGC scale). Provide a base64-encoded image or a public image URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoAny known defects or context for the grader
image_urlNoPublic URL of the comic cover image
image_base64NoBase64-encoded image (JPEG or PNG)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It accurately describes the analytical behavior but does not disclose error handling, requirements (e.g., need at least one image), or edge cases like providing both image inputs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the purpose and input method. No extraneous words; every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (input image to output grade), the description covers the input format but omits details on the output format, which would help the agent interpret results. Sibling tools exist but no comparison is made.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds value by clarifying that either a base64-encoded image or a public URL is required. However, it does not elaborate on the 'notes' parameter beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: analyzing a comic book image to estimate its condition grade on the 0.5–10.0 CGC scale. It distinguishes itself from sibling tools like 'fetch_comic_price' and 'verify_slab' by focusing on grading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (to grade a comic image) but does not explicitly state when not to use or compare to alternatives like 'detect_key_issue'. Usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_slabB

Verify authenticity of a CGC/CBCS graded comic slab from a photo. Detects fake, tampered, or fraudulent slabs using AI visual analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
image_urlNoPublic URL of the slab image
cert_numberNoCGC certification number from the label, e.g. 3944834002
image_base64NoBase64-encoded image
claimed_gradeNoGrade claimed on the slab, e.g. '9.8'
claimed_titleNoComic title claimed on the slab

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions AI visual analysis but doesn't disclose behavior details like handling of poor images, authentication process, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-loaded with main purpose. No unnecessary words, efficient communication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters and no output schema, the description lacks context on return values, error states, or what constitutes a successful verification. Incomplete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for each parameter, but the tool description adds no extra meaning beyond listing the tool's purpose. It doesn't clarify parameter usage, format, or dependencies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool verifies authenticity of graded comic slabs, using AI visual analysis to detect fakes. Verb and resource are specific, and it distinguishes from sibling tools like grade_comic or fetch_comic_price.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives, no prerequisites mentioned. Users might confuse with grade_comic or collection_value, but description doesn't clarify.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation5/5

Each tool addresses a distinct facet of comic book evaluation: collection value estimation, key issue detection, price fetching, grading, and slab verification. There is no overlap or confusion between tool purposes.

Naming Consistency4/5

Four of five tools follow a clear verb_noun pattern (detect_key_issue, fetch_comic_price, grade_comic, verify_slab). 'collection_value' uses a noun_noun structure, which is a minor deviation but still intuitively clear.

Tool Count5/5

With five tools, the server covers essential comic book operations without being overwhelming or sparse. Each tool serves a clear purpose and contributes to a coherent workflow.

Completeness4/5

Core functionalities are well-covered, but there are minor gaps: no explicit tool for removing comics from a collection or for searching comics by metadata. However, the existing tools handle the primary use cases effectively.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    On-chain TCG price oracle for the LitecoinVM ecosystem. 6 tools: search 433K+ trading cards, 60-day price history, Merkle proof verification on LiteForge (Chain 4441), Monte Carlo simulation, and AI card grading via Qwen 2.5 VL.
    7
    Business Source 1.1
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to interact with the Casper blockchain through MCP tools for reading node state, inspecting blocks, querying global state, and evaluating treasury policies. Includes a Treasury Guard reference agent that autonomously enforces DeFi treasury policies on Casper Testnet.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ffffffffhugfadil/fanoracle-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server