Skip to content

Commit 3d863d9

Browse files
MCP registry publishing setup (v0.1.9) (#68)
* Add MCP registry server.json with schema validation - Add server.json for MCP registry publishing with subfolder support - Add server.json version fields to version consistency test - Add schema validation test that fetches and validates against $schema - Add jsonschema dev dependency Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add MCP registry metadata for publishing - Add mcp-name to README for PyPI ownership validation - Update server.json schema to 2025-12-11 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Bump version to 0.1.9 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent b92eb9e commit 3d863d9

9 files changed

Lines changed: 79 additions & 7 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"name": "everyrow",
1212
"source": "./",
1313
"description": "Claude Code plugin for the everyrow SDK - AI-powered data processing utilities for transforming, deduping, merging, ranking, and screening dataframes",
14-
"version": "0.1.8"
14+
"version": "0.1.9"
1515
}
1616
]
1717
}

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "everyrow",
33
"description": "Claude Code plugin for the everyrow SDK - AI-powered data processing utilities for transforming, deduping, merging, ranking, and screening dataframes",
4-
"version": "0.1.8",
4+
"version": "0.1.9",
55
"author": {
66
"name": "FutureSearch"
77
},

everyrow-mcp/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ cd everyrow-mcp
129129
uv sync
130130
uv run pytest
131131
```
132+
For MCP registry publishing:
133+
134+
mcp-name: io.github.futuresearch/everyrow-mcp
135+
132136

133137
## License
134138

everyrow-mcp/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "everyrow-mcp"
3-
version = "0.1.8"
3+
version = "0.1.9"
44
description = "MCP server for everyrow: agent ops at spreadsheet scale"
55
readme = "README.md"
66
requires-python = ">=3.12"

everyrow-mcp/server.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3+
"name": "io.github.futuresearch/everyrow-mcp",
4+
"title": "Everyrow MCP Server",
5+
"description": "AI-powered dataframe ops: transform, dedupe, merge, rank, and screen with natural language",
6+
"repository": {
7+
"url": "https://github.com/futuresearch/everyrow-sdk",
8+
"source": "github",
9+
"subfolder": "everyrow-mcp"
10+
},
11+
"websiteUrl": "https://github.com/futuresearch/everyrow-sdk/tree/main/everyrow-mcp",
12+
"version": "0.1.9",
13+
"packages": [
14+
{
15+
"registryType": "pypi",
16+
"registryBaseUrl": "https://pypi.org",
17+
"identifier": "everyrow-mcp",
18+
"version": "0.1.9",
19+
"runtimeHint": "uvx",
20+
"transport": {
21+
"type": "stdio"
22+
},
23+
"environmentVariables": [
24+
{
25+
"description": "API key for the everyrow service, found at https://everyrow.io/api-key",
26+
"isRequired": true,
27+
"isSecret": true,
28+
"name": "EVERYROW_API_KEY"
29+
}
30+
]
31+
}
32+
]
33+
}

gemini-extension.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "everyrow",
33
"description": "Gemini extension for the everyrow SDK - AI-powered data processing utilities for transforming, deduping, merging, ranking, and screening dataframes",
4-
"version": "0.1.8",
4+
"version": "0.1.9",
55
"mcpServers": {
66
"everyrow": {
77
"command": "uvx",

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "everyrow"
3-
version = "0.1.8"
3+
version = "0.1.9"
44
description = "An SDK for everyrow.io: agent ops at spreadsheet scale"
55
readme = "README.md"
66
requires-python = ">=3.12"
@@ -33,6 +33,7 @@ dev = [
3333
"pytest-mock>=3.15.1",
3434
"basedpyright>=1.22.0",
3535
"ruff>=0.9.9",
36+
"jsonschema>=4.0.0",
3637
]
3738

3839
[tool.basedpyright]

tests/test_version.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import json
22
import tomllib
33

4+
import httpx
5+
import jsonschema
46
import pytest
57

68

79
def test_version_consistency(pytestconfig: pytest.Config):
8-
"""Check that version is consistent across pyproject.toml, plugin.json, gemini-extension.json, marketplace.json, and everyrow-mcp/pyproject.toml."""
10+
"""Check that version is consistent across pyproject.toml, plugin.json, gemini-extension.json, marketplace.json, everyrow-mcp/pyproject.toml, and everyrow-mcp/server.json."""
911
root = pytestconfig.rootpath
1012

1113
pyproject_path = root / "pyproject.toml"
@@ -33,6 +35,12 @@ def test_version_consistency(pytestconfig: pytest.Config):
3335
mcp_pyproject = tomllib.load(f)
3436
mcp_version = mcp_pyproject["project"]["version"]
3537

38+
server_json_path = root / "everyrow-mcp" / "server.json"
39+
with open(server_json_path) as f:
40+
server_json = json.load(f)
41+
server_json_version = server_json["version"]
42+
server_json_package_version = server_json["packages"][0]["version"]
43+
3644
assert pyproject_version == plugin_version, (
3745
f"pyproject.toml version ({pyproject_version}) != plugin.json version ({plugin_version})"
3846
)
@@ -45,3 +53,27 @@ def test_version_consistency(pytestconfig: pytest.Config):
4553
assert pyproject_version == mcp_version, (
4654
f"pyproject.toml version ({pyproject_version}) != everyrow-mcp/pyproject.toml version ({mcp_version})"
4755
)
56+
assert pyproject_version == server_json_version, (
57+
f"pyproject.toml version ({pyproject_version}) != everyrow-mcp/server.json version ({server_json_version})"
58+
)
59+
assert pyproject_version == server_json_package_version, (
60+
f"pyproject.toml version ({pyproject_version}) != everyrow-mcp/server.json packages[0].version ({server_json_package_version})"
61+
)
62+
63+
64+
def test_server_json_schema(pytestconfig: pytest.Config):
65+
"""Validate everyrow-mcp/server.json against its JSON schema."""
66+
root = pytestconfig.rootpath
67+
68+
server_json_path = root / "everyrow-mcp" / "server.json"
69+
with open(server_json_path) as f:
70+
server_json = json.load(f)
71+
72+
schema_url = server_json.get("$schema")
73+
assert schema_url, "server.json must have a $schema field"
74+
75+
response = httpx.get(schema_url)
76+
response.raise_for_status()
77+
schema = response.json()
78+
79+
jsonschema.validate(instance=server_json, schema=schema)

uv.lock

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)