Draft Specification for MSP-1.0.0 — a lightweight semantic protocol for AI-friendly, transparent, well-sourced web content.
The Mark Semantic Protocol (MSP-1) is a lightweight standard for exposing information about how a web page was created, sourced, and reviewed, in a form that is both human-understandable and machine-readable.
MSP-1 is designed for sites that want to surface trust signals: how many sources are used, how recently the page was reviewed by a human, how AI was involved in creating the content, and what kind of verification standard the page is held to.
MSP-1 is content-neutral and can be applied to photography guides, technical documentation, news analysis, reference material, and more.
MSP-1 defines metadata at two main levels:
An MSP metadata block is a machine-readable structure (typically JSON-LD or JSON) embedded in a page that exposes the MSP fields for that page.
MSP-1 defines three verification levels — Core, Verified, and Authoritative — which indicate how thoroughly the content has been sourced and reviewed.
MSP-1 requires explicit disclosure of whether AI was used in drafting, editing, fact-checking, or other roles, and whether a human has reviewed the result.
Sites may optionally declare how often they intend to review and update the content, and what kinds of events (e.g., new research, major industry changes) would trigger an update outside the normal cycle.
MSP-1 uses a small set of fields to describe each page. The table below uses simple
JSON-style names. When integrated into JSON-LD, these may be prefixed with
msp:.
| Field | Type | Required | Description |
|---|---|---|---|
mspVersion |
string | Yes | MSP version string, e.g. "MSP-1.0.0". |
pageId |
string | Yes | Stable identifier for the page within the site. |
siteId |
string | Yes | Identifier for the site, e.g. the primary domain. |
verificationLevel |
string | Yes | One of "core", "verified", or "authoritative". |
contentType |
string | Yes | Content type label (e.g. "article", "guide", "reference"). |
topic |
string | Yes | Short topic key or category. |
lastUpdated |
datetime | Yes | Last updated timestamp (ISO 8601). |
lastReviewed |
datetime | Yes | Last human review timestamp (ISO 8601). |
language |
string | Yes | Language tag, e.g. "en-US". |
sources |
array | Recommended | List of source objects; required for higher verification levels. |
ai |
object | Recommended | AI usage and review details. |
updatePolicy |
object | Optional | Update frequency and triggers. |
Each item in sources SHOULD follow this structure:
{
"type": "secondary", // "primary" | "secondary" | "tertiary"
"title": "Lens Choice and Depth of Field",
"url": "https://example.com/lens-choice",
"publisher": "Example Photo Journal",
"publishedDate": "2024-09-01",
"accessedDate": "2025-11-23",
"notes": "Overview of focal length vs perspective."
}
{
"used": true,
"role": ["drafting", "editing"],
"models": ["GPT-5.1 Thinking"],
"humanReviewed": true
}
{
"frequency": "annually",
"triggeredBy": "major camera or lens market changes"
}
A site implementing MSP-1 SHOULD expose a site-level declaration at a well-known path,
such as /.well-known/msp.json.
Example structure:
{
"mspVersion": "MSP-1.0.0",
"siteId": "example.com",
"siteName": "Example Knowledge Site",
"siteUrl": "https://example.com",
"supportedVersionRange": "MSP-1.0.x",
"defaultVerificationTarget": "verified",
"reviewPolicy": {
"defaultFrequency": "annually",
"notes": "Cornerstone articles are reviewed at least once per year."
},
"editorialPolicyUrl": "https://example.com/about/editorial-policy",
"aiUsagePolicyUrl": "https://example.com/about/ai-usage",
"contact": {
"email": "info@example.com",
"correctionsUrl": "https://example.com/contact"
}
}
This JSON Schema is provided as a reference for validating MSP-1 page-level objects. Implementers may extend it with additional fields as long as required fields remain unchanged.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://msp-1.com/schema/msp-1-page.json",
"title": "MSP-1 Page Metadata",
"type": "object",
"required": [
"mspVersion",
"pageId",
"siteId",
"verificationLevel",
"contentType",
"topic",
"lastUpdated",
"lastReviewed",
"language"
],
"properties": {
"mspVersion": { "type": "string", "pattern": "^MSP-1\\.\\d+\\.\\d+$" },
"pageId": { "type": "string" },
"siteId": { "type": "string" },
"verificationLevel": {
"type": "string",
"enum": ["core", "verified", "authoritative"]
},
"contentType": { "type": "string" },
"topic": { "type": "string" },
"lastUpdated": { "type": "string", "format": "date-time" },
"lastReviewed": { "type": "string", "format": "date-time" },
"language": { "type": "string" },
"sources": {
"type": "array",
"items": {
"type": "object",
"required": ["type", "title", "url", "accessedDate"],
"properties": {
"type": {
"type": "string",
"enum": ["primary", "secondary", "tertiary"]
},
"title": { "type": "string" },
"url": { "type": "string", "format": "uri" },
"publisher": { "type": "string" },
"publishedDate": { "type": "string", "format": "date" },
"accessedDate": { "type": "string", "format": "date" },
"notes": { "type": "string" }
}
}
},
"ai": {
"type": "object",
"properties": {
"used": { "type": "boolean" },
"role": {
"type": "array",
"items": {
"type": "string",
"enum": [
"drafting",
"editing",
"fact-checking",
"image-generation",
"other"
]
}
},
"models": { "type": "array", "items": { "type": "string" } },
"humanReviewed": { "type": "boolean" }
}
},
"updatePolicy": {
"type": "object",
"properties": {
"frequency": { "type": "string" },
"triggeredBy": { "type": "string" }
}
}
}
}
Example of an MSP-1 metadata block embedded in a page as JSON-LD:
<script type="application/ld+json">
{
"@context": {
"schema": "https://schema.org/",
"msp": "https://msp-1.com/ns#"
},
"@type": "schema:Article",
"schema:headline": "Choosing the Best Lens for Portrait Photography",
"schema:author": {
"@type": "schema:Person",
"name": "Mark Johnson"
},
"schema:datePublished": "2025-11-24",
"schema:dateModified": "2025-11-24",
"msp:mspVersion": "MSP-1.0.0",
"msp:pageId": "photographyselect-lens-guide-portrait",
"msp:siteId": "photographyselect.com",
"msp:verificationLevel": "verified",
"msp:contentType": "guide",
"msp:topic": "portrait-lens-selection",
"msp:lastUpdated": "2025-11-24T10:15:00-05:00",
"msp:lastReviewed": "2025-11-24T09:30:00-05:00",
"msp:language": "en-US",
"msp:sources": [
{
"@type": "msp:Source",
"msp:type": "secondary",
"msp:title": "Lens Choice and Depth of Field",
"msp:url": "https://example.com/lens-choice",
"msp:publisher": "Example Photo Journal",
"msp:publishedDate": "2024-09-01",
"msp:accessedDate": "2025-11-23"
},
{
"@type": "msp:Source",
"msp:type": "secondary",
"msp:title": "Portrait Lenses Explained",
"msp:url": "https://example.org/portrait-lenses",
"msp:publisher": "Example Org",
"msp:publishedDate": "2023-04-10",
"msp:accessedDate": "2025-11-23"
}
],
"msp:ai": {
"msp:used": true,
"msp:role": ["drafting", "editing"],
"msp:models": ["GPT-5.1 Thinking"],
"msp:humanReviewed": true
},
"msp:updatePolicy": {
"msp:frequency": "annually",
"msp:triggeredBy": "major camera/lens market changes"
}
}
</script>
A page is MSP-1 conformant if:
verificationLevel matches the minimum sourcing criteria for that level.Sites MAY display MSP-1 badges to indicate the declared verification level, such as MSP-1 Core, MSP-1 Verified, or MSP-1 Authoritative.
Badges should link back to either the site’s own MSP-1 explainer page or to
https://msp-1.com/ for general protocol information.
MSP-1 uses semantic versioning in the form MSP-<major>.<minor>.<patch>,
e.g. MSP-1.0.0.
Non-normative guidance for implementers.
Implementers are encouraged to use folder-based URL structures (e.g.
/spec/, /schema/, /docs/) with index
documents rather than flat file names. This improves clarity for both humans
and AI agents discovering resources.
Early reference implementations (such as photography-focused knowledge sites) may serve as examples of MSP-1 usage in real content. These implementations can help refine the protocol without changing the core required fields.