# Schema Org Mcp

> An MCP server for schema.org

- **Type:** MCP server
- **Install:** `agentstack add mcp-theycallmeholla-schema-org-mcp`
- **Verified:** Pending review
- **Seller:** [Theycallmeholla](https://agentstack.voostack.com/s/theycallmeholla)
- **Installs:** 0
- **Category:** [Integrations](https://agentstack.voostack.com/c/integrations)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Theycallmeholla](https://github.com/Theycallmeholla)
- **Source:** https://github.com/Theycallmeholla/schema-org-mcp

## Install

```sh
agentstack add mcp-theycallmeholla-schema-org-mcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Schema.org MCP Server

**A Model Context Protocol server for the complete schema.org vocabulary**

[](https://www.npmjs.com/package/schema-org-mcp)
[](LICENSE)
[](https://nodejs.org)
[](https://modelcontextprotocol.io)

Empower AI assistants to explore schema.org types, generate JSON-LD examples, validate structured data, and navigate the complete ontology with intelligent fuzzy matching and persistent caching.

[Features](#features) · [Installation](#installation) · [Quick Start](#quick-start) · [Documentation](#available-tools) · [Contributing](#contributing)

---

## Table of Contents

- [Features](#features)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Available Tools](#available-tools)
  - [Operational Tools](#operational-tools)
  - [Core Tools](#core-tools)
  - [Batch Tools](#batch-tools)
- [Example Workflows](#example-workflows)
- [How It Works](#how-it-works)
- [Configuration](#configuration)
- [Development](#development)
- [Deployment](#deployment)
- [Troubleshooting](#troubleshooting)
- [Contributing](#contributing)
- [License](#license)

---

## Features

### v1.1.0 Highlights

| Feature | Description |
|---------|-------------|
| **Persistent Caching** | Schema.org data cached locally with TTL-based refresh—no cold start delays |
| **Fuzzy Matching** | Typo-tolerant lookups with intelligent "Did you mean?" suggestions |
| **Type Aliases** | Natural language shortcuts: `blog` → BlogPosting, `faq` → FAQPage |
| **Filtered Properties** | Get direct-only, inherited-only, or paginated property lists |
| **Batch Operations** | Compare types, validate multiple JSON-LD objects, bulk lookups |
| **Dynamic Examples** | Generated examples use current dates and realistic data |

### Core Capabilities

- **Type Exploration** — Detailed information about any schema.org type with deprecation status
- **Smart Search** — Keyword search with relevance-based ranking
- **Hierarchy Navigation** — Explore inheritance relationships, ancestors, and descendants
- **Property Discovery** — List all properties with expected types, including inherited ones
- **JSON-LD Generation** — Create realistic examples at minimal, standard, or comprehensive detail levels
- **Validation** — Check structured data against the schema.org vocabulary with actionable feedback
- **Relationship Mapping** — Discover types connected through property relationships

---

## Installation

### Prerequisites

- **Node.js** >= 18.0.0
- **npm** or **yarn**

### Clone and Build

```bash
# Clone the repository
git clone https://github.com/your-org/schema-org-mcp.git
cd schema-org-mcp

# Install dependencies
npm install

# Build the project
npm run build

# Verify the installation
npm start
```

### Install via npm (after publishing)

```bash
npm install -g schema-org-mcp
```

---

## Quick Start

### Integration with Claude Desktop

Add the server to your Claude Desktop configuration:

Platform
Configuration Path

macOS
~/Library/Application Support/Claude/claude_desktop_config.json

Windows
%APPDATA%\Claude\claude_desktop_config.json

**Local Installation:**

```json
{
  "mcpServers": {
    "schema-org": {
      "command": "node",
      "args": ["/absolute/path/to/schema-org-mcp/dist/index.js"]
    }
  }
}
```

**Via npx:**

```json
{
  "mcpServers": {
    "schema-org": {
      "command": "npx",
      "args": ["schema-org-mcp"]
    }
  }
}
```

---

## Available Tools

The server provides **14 tools** organized into three categories.

### Operational Tools

#### `server_info`

Returns server version, build metadata, and runtime information. Use this to verify which version is deployed.

```json
{}
```

**Response:**
- `version`, `gitSha`, `gitBranch`, `buildTime`
- `runtime` — Node version, platform, uptime
- `tools` — Count and names of registered tools
- `cache` — Cache status

---

#### `server_stats`

Returns performance statistics including cache hit rates, tool invocation counts, and timing metrics.

```json
{}
```

**Response:**
- `coldStartMs`, `warmStartMs`
- `cacheHits`, `cacheMisses`, `cacheStaleHits`
- `toolInvocations` — Per-tool count, errors, average duration
- `uptimeMs`

---

### Core Tools

#### `get_schema_type`

Retrieve detailed information about a schema.org type. Supports fuzzy matching for typos and natural aliases.

```json
{
  "typeName": "Person"
}
```

**Also accepts:**
- Typos: `"Persn"` → suggests `Person`
- Aliases: `"blog"` → `BlogPosting`, `"faq"` → `FAQPage`

**Response:**
- `name`, `description`, `id`, `url`
- `superTypes` — Direct parent types
- `category` — `core`, `pending`, `auto`, `bib`, or `health-lifesci`
- `deprecated` and `supersededBy` (if applicable)

---

#### `search_schemas`

Search for schema types by keyword with relevance-based ranking.

```json
{
  "query": "local business",
  "limit": 10
}
```

---

#### `get_type_hierarchy`

Get complete inheritance hierarchy including ancestors and children.

```json
{
  "typeName": "NewsArticle"
}
```

---

#### `get_type_properties`

List all properties available for a type with filtering and pagination support.

```json
{
  "typeName": "Organization",
  "mode": "direct",
  "includeDeprecated": false,
  "limit": 20,
  "offset": 0
}
```

| Parameter | Options | Default |
|-----------|---------|---------|
| `mode` | `all`, `direct`, `inherited` | `all` |
| `includeDeprecated` | `true`, `false` | `false` |
| `limit` | Number | — |
| `offset` | Number | `0` |

---

#### `generate_example`

Generate realistic JSON-LD examples with dynamic dates and nested types.

```json
{
  "typeName": "LocalBusiness",
  "style": "comprehensive",
  "customProperties": {
    "name": "My Coffee Shop"
  }
}
```

| Style | Description |
|-------|-------------|
| `minimal` | Name property only |
| `standard` | Common properties |
| `comprehensive` | Full property set with nested types |

**Supported domain presets:** Person, Organization, LocalBusiness, Product, Event, Article, BlogPosting, Recipe, WebSite, FAQPage, Place

---

#### `get_property_details`

Get comprehensive information about a specific property. Supports fuzzy matching.

```json
{
  "propertyName": "address"
}
```

---

#### `get_enumeration_values`

Retrieve all valid values for an enumeration type.

```json
{
  "enumerationType": "DayOfWeek"
}
```

---

#### `validate_jsonld`

Validate JSON-LD structured data with intelligent suggestions for typos.

```json
{
  "jsonld": {
    "@context": "https://schema.org",
    "@type": "Product",
    "name": "Widget",
    "nmae": "typo"
  }
}
```

**Response:**
- `valid` — Boolean result
- `errors` — Unknown types or properties with suggestions
- `warnings` — Deprecated items, missing context
- `suggestions` — Recommended properties to add

---

#### `get_related_types`

Discover types connected through property relationships.

```json
{
  "typeName": "Person"
}
```

---

### Batch Tools

#### `get_multiple_types`

Retrieve information about multiple types in a single call.

```json
{
  "typeNames": ["Person", "Organization", "LocalBusiness"]
}
```

---

#### `compare_types`

Compare 2–5 schema.org types side by side with usage recommendations.

```json
{
  "typeNames": ["Article", "BlogPosting", "NewsArticle"]
}
```

**Response:**
- `types` — Summary of each type
- `sharedProperties` — Properties common to all
- `uniqueProperties` — Properties unique to each
- `recommendation` — When to use each type

---

#### `validate_jsonld_batch`

Validate multiple JSON-LD objects in a single call.

```json
{
  "items": [
    { "@context": "https://schema.org", "@type": "Person", "name": "John" },
    { "@context": "https://schema.org", "@type": "Organization", "name": "Acme" }
  ]
}
```

---

## Example Workflows

### E-commerce Product Page

```
1. search_schemas      → {"query": "product"}
2. compare_types       → {"typeNames": ["Product", "Offer", "AggregateOffer"]}
3. get_type_properties → {"typeName": "Product", "mode": "direct", "limit": 15}
4. generate_example    → {"typeName": "Product", "style": "comprehensive"}
```

### Article vs BlogPosting Decision

```
1. compare_types → {"typeNames": ["Article", "BlogPosting"]}

   Response includes recommendation:
   "Use BlogPosting for blog content with clear publication dates and author.
    Use Article for general news or editorial content."
```

### Bulk Markup Validation

```
1. validate_jsonld_batch → {"items": [...array of JSON-LD objects...]}

   Returns per-object validation with actionable suggestions
```

### Typo Recovery

```
1. get_schema_type → {"typeName": "Perosn"}

   Error: "Type 'Perosn' not found. Did you mean: Person, Physician, Performer?"
```

---

## How It Works

### Caching Architecture

The server fetches the complete schema.org vocabulary and implements a multi-layer cache:

| Layer | Location | Behavior |
|-------|----------|----------|
| Memory | Runtime | Instant access after first load |
| Disk | `~/.cache/schema-org-mcp/schema-org-data.json` | Persists across restarts |

- **TTL:** 24 hours (configurable)
- **Fallback:** Uses stale cache if schema.org is unavailable

### Fuzzy Matching Pipeline

1. Check natural language aliases (`blog` → `BlogPosting`)
2. Attempt case-insensitive and normalized matching
3. Calculate similarity scores using Levenshtein distance
4. Return top 3 suggestions if score > 0.4

### Indexed Data

| Category | Count |
|----------|-------|
| Types (classes) | ~800+ |
| Properties | ~1,400+ |
| Enumeration types | ~80+ |

---

## Configuration

The client accepts optional configuration parameters:

```typescript
const client = new SchemaOrgClient({
  cacheDir: '/custom/cache/path',    // Default: ~/.cache/schema-org-mcp
  ttlMs: 12 * 60 * 60 * 1000,        // Default: 24 hours
  offline: false,                     // Default: false
});
```

---

## Development

```bash
# Watch mode for development
npm run dev

# Run the test suite
npm test

# Build for production (generates build fingerprint)
npm run build

# Run full QA checklist
npm run qa

# Verify deployment
npm run verify
```

---

## Deployment

### Build with Fingerprint

Every build embeds version metadata for traceability:

```bash
npm run build
# Output: Build info generated: v1.1.0 (abc1234)
```

### Verify Deployment

Confirm the correct version is running:

```bash
npm run verify

# Or with explicit version:
npm run verify 1.1.0 abc1234
```

**Verification checks:**
1. Version and git SHA match
2. `compare_types` tool responds correctly
3. Fuzzy matching returns suggestions
4. FAQPage examples include `mainEntity`
5. Cache status is available

### Runtime Fingerprint

On startup, the server logs its identity:

```
═══════════════════════════════════════════
schema-org-mcp v1.1.0 (abc1234)
Built: 2025-04-04T15:00:00.000Z
Branch: main
Node: v22.20.0
Tools: 14 registered
  server_info, server_stats, get_schema_type, ...
═══════════════════════════════════════════
```

Use the `server_info` tool to check the running version programmatically.

---

## Troubleshooting

### Slow Cold Start

If the first request is slow, the cache may have expired:

```bash
ls -la ~/.cache/schema-org-mcp/
```

### Fuzzy Suggestions Not Appearing

Ensure schema data is fully loaded. The `initialize()` method must complete before fuzzy matching works.

### Force Cache Refresh

Delete the cache directory to fetch fresh data:

```bash
rm -rf ~/.cache/schema-org-mcp/
```

---

## Contributing

Contributions are welcome! Please follow these steps:

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

Please ensure all tests pass before submitting.

---

## License

This project is licensed under the **MIT License** — see the [LICENSE](LICENSE) file for details.

---

**[Back to Top](#schema-org-mcp-server)**

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Theycallmeholla](https://github.com/Theycallmeholla)
- **Source:** [Theycallmeholla/schema-org-mcp](https://github.com/Theycallmeholla/schema-org-mcp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-theycallmeholla-schema-org-mcp
- Seller: https://agentstack.voostack.com/s/theycallmeholla
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
