datoon 1.7.0__tar.gz → 1.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datoon-1.7.0 → datoon-1.7.1}/.github/workflows/publish-mcp.yml +33 -10
- datoon-1.7.1/.github/workflows/publish.yml +82 -0
- {datoon-1.7.0 → datoon-1.7.1}/CHANGELOG.md +7 -0
- {datoon-1.7.0 → datoon-1.7.1}/MARKETPLACES.md +16 -10
- {datoon-1.7.0 → datoon-1.7.1}/PKG-INFO +1 -1
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/_version.py +3 -3
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/mcp_server.py +5 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon.egg-info/PKG-INFO +1 -1
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon.egg-info/scm_version.json +2 -2
- datoon-1.7.0/.github/workflows/publish.yml +0 -45
- {datoon-1.7.0 → datoon-1.7.1}/.agents/plugins/marketplace.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.claude-plugin/marketplace.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.claude-plugin/plugin.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.editorconfig +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.gitattributes +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/dependabot.yml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/workflows/package-installer-smoke.yml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/workflows/pages.yml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/workflows/pre-commit.yml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/workflows/release.yml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/workflows/tests.yml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/workflows/validate-artifacts.yml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.github/workflows/workflow-lint.yml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.gitignore +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.pre-commit-config.yaml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/.releaserc.yaml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/CLAUDE.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/CONTRIBUTING.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/INSTALL.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/LICENSE +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/README.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/SECURITY.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/SKILL.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/assets/datoon-banner.svg +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/REPORT.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/agent_results.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/expected_answers.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/generate_payloads.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/1_large.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/1_medium.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/1_small.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/2_large.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/2_medium.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/2_small.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/3_large.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/3_medium.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/payloads/3_small.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/1_large.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/1_medium.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/1_small.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/2_large.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/2_medium.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/2_small.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/3_large.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/3_medium.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/reports/3_small.report.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/scored_agent_results.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/1_large.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/1_medium.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/1_small.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/2_large.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/2_medium.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/2_small.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/3_large.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/3_medium.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/agent_skill_eval/toon/3_small.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/payloads.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/results/.gitkeep +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/benchmarks/run.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/datoon/SKILL.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/datoon.skill +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/docs/.nojekyll +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/docs/app.js +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/docs/assets/datoon-banner.svg +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/docs/index.html +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/docs/styles.css +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/glama.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/install.sh +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/plugins/datoon/.codex-plugin/plugin.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/plugins/datoon/skills/datoon/SKILL.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/pyproject.toml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/scripts/ab_skill_benchmark.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/scripts/install.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/scripts/summarize_agent_skill_eval.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/scripts/validate_plugin_metadata.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/scripts/validate_skill_sync.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/server.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/setup.cfg +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/setup.sh +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/skills/datoon/README.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/skills/datoon/SKILL.md +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/smithery.yaml +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/__init__.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/analyzer.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/cli.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/converter.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/models.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/py.typed +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/readers/__init__.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/readers/columnar.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/readers/csv.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/readers/excel.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/readers/jsonl.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/readers/numbers.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/readers/xml.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon/readers/yaml.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon.egg-info/SOURCES.txt +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon.egg-info/dependency_links.txt +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon.egg-info/entry_points.txt +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon.egg-info/requires.txt +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon.egg-info/scm_file_list.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/src/datoon.egg-info/top_level.txt +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/fixtures/users.expected.toon +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/fixtures/users.json +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/integration/test_toon_cli_integration.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/unit/test_analyzer.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/unit/test_cli.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/unit/test_converter_policy.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/unit/test_installer.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/unit/test_mcp_server.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/unit/test_models.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/tests/unit/test_readers.py +0 -0
- {datoon-1.7.0 → datoon-1.7.1}/uv.lock +0 -0
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
name: Publish to MCP Registry
|
|
2
2
|
|
|
3
|
-
# Publishes server.json to the official MCP Registry after a
|
|
3
|
+
# Publishes server.json to the official MCP Registry after a release.
|
|
4
4
|
# Ownership is proven via GitHub OIDC (namespace io.github.andrii-su/*) and the
|
|
5
5
|
# `mcp-name: io.github.andrii-su/datoon` token in the PyPI package README.
|
|
6
6
|
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
7
|
+
# Keys off the Release workflow's completion (GITHUB_TOKEN-created releases do
|
|
8
|
+
# not fire `release: published`). Runs only when main HEAD carries a new version
|
|
9
|
+
# tag, and waits for that version to appear on PyPI before publishing, so it
|
|
10
|
+
# never races the parallel Publish to PyPI workflow.
|
|
9
11
|
|
|
10
12
|
on:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
workflow_run:
|
|
14
|
+
workflows: ["Release"]
|
|
15
|
+
types: [completed]
|
|
13
16
|
workflow_dispatch:
|
|
14
17
|
|
|
15
18
|
permissions:
|
|
@@ -18,16 +21,32 @@ permissions:
|
|
|
18
21
|
|
|
19
22
|
jobs:
|
|
20
23
|
publish:
|
|
24
|
+
if: >-
|
|
25
|
+
github.event_name == 'workflow_dispatch'
|
|
26
|
+
|| github.event.workflow_run.conclusion == 'success'
|
|
21
27
|
runs-on: ubuntu-latest
|
|
22
28
|
steps:
|
|
23
29
|
- uses: actions/checkout@v6
|
|
30
|
+
with:
|
|
31
|
+
ref: main
|
|
32
|
+
fetch-depth: 0
|
|
24
33
|
|
|
25
|
-
- name: Resolve
|
|
34
|
+
- name: Resolve version to publish
|
|
26
35
|
id: version
|
|
27
|
-
run:
|
|
36
|
+
run: |
|
|
37
|
+
version="$(git tag --points-at HEAD | sed 's/^v//' | head -1)"
|
|
38
|
+
if [ -z "$version" ] && [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
39
|
+
version="$(git describe --tags --abbrev=0 | sed 's/^v//')"
|
|
40
|
+
fi
|
|
41
|
+
echo "version=${version}" >> "$GITHUB_OUTPUT"
|
|
42
|
+
if [ -z "$version" ]; then
|
|
43
|
+
echo "No release tag at HEAD - nothing to publish."
|
|
44
|
+
else
|
|
45
|
+
echo "Publishing datoon ${version} to the MCP Registry."
|
|
46
|
+
fi
|
|
28
47
|
|
|
29
|
-
- name: Sync server.json version
|
|
30
|
-
if:
|
|
48
|
+
- name: Sync server.json version
|
|
49
|
+
if: steps.version.outputs.version != ''
|
|
31
50
|
run: |
|
|
32
51
|
version="${{ steps.version.outputs.version }}"
|
|
33
52
|
tmp="$(mktemp)"
|
|
@@ -38,16 +57,18 @@ jobs:
|
|
|
38
57
|
cat server.json
|
|
39
58
|
|
|
40
59
|
- name: Install mcp-publisher
|
|
60
|
+
if: steps.version.outputs.version != ''
|
|
41
61
|
run: |
|
|
42
62
|
curl -sSL "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_linux_amd64.tar.gz" \
|
|
43
63
|
| tar -xz mcp-publisher
|
|
44
64
|
sudo mv mcp-publisher /usr/local/bin/
|
|
45
65
|
|
|
46
66
|
- name: Validate server.json
|
|
67
|
+
if: steps.version.outputs.version != ''
|
|
47
68
|
run: mcp-publisher validate
|
|
48
69
|
|
|
49
70
|
- name: Wait for the released version to appear on PyPI
|
|
50
|
-
if:
|
|
71
|
+
if: steps.version.outputs.version != ''
|
|
51
72
|
run: |
|
|
52
73
|
version="${{ steps.version.outputs.version }}"
|
|
53
74
|
url="https://pypi.org/pypi/datoon/${version}/json"
|
|
@@ -64,7 +85,9 @@ jobs:
|
|
|
64
85
|
exit 1
|
|
65
86
|
|
|
66
87
|
- name: Login via GitHub OIDC
|
|
88
|
+
if: steps.version.outputs.version != ''
|
|
67
89
|
run: mcp-publisher login github-oidc
|
|
68
90
|
|
|
69
91
|
- name: Publish to MCP Registry
|
|
92
|
+
if: steps.version.outputs.version != ''
|
|
70
93
|
run: mcp-publisher publish
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
# Releases are cut by the Release workflow using GITHUB_TOKEN, and GitHub does
|
|
4
|
+
# not fire `release: published` for events created by GITHUB_TOKEN. So this
|
|
5
|
+
# workflow keys off the Release workflow's completion instead, and publishes
|
|
6
|
+
# only when the current main HEAD carries a new version tag.
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
workflow_run:
|
|
10
|
+
workflows: ["Release"]
|
|
11
|
+
types: [completed]
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
build:
|
|
20
|
+
if: >-
|
|
21
|
+
github.event_name == 'workflow_dispatch'
|
|
22
|
+
|| github.event.workflow_run.conclusion == 'success'
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
outputs:
|
|
25
|
+
version: ${{ steps.ver.outputs.version }}
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v6
|
|
28
|
+
with:
|
|
29
|
+
ref: main
|
|
30
|
+
fetch-depth: 0
|
|
31
|
+
|
|
32
|
+
- name: Resolve version to publish
|
|
33
|
+
id: ver
|
|
34
|
+
run: |
|
|
35
|
+
version="$(git tag --points-at HEAD | sed 's/^v//' | head -1)"
|
|
36
|
+
if [ -z "$version" ] && [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
37
|
+
version="$(git describe --tags --abbrev=0 | sed 's/^v//')"
|
|
38
|
+
fi
|
|
39
|
+
echo "version=${version}" >> "$GITHUB_OUTPUT"
|
|
40
|
+
if [ -z "$version" ]; then
|
|
41
|
+
echo "No release tag at HEAD - nothing to publish."
|
|
42
|
+
else
|
|
43
|
+
echo "Publishing datoon ${version}."
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
- name: Check out the exact release tag
|
|
47
|
+
if: steps.ver.outputs.version != ''
|
|
48
|
+
run: git checkout "v${{ steps.ver.outputs.version }}"
|
|
49
|
+
|
|
50
|
+
- name: Install uv
|
|
51
|
+
if: steps.ver.outputs.version != ''
|
|
52
|
+
uses: astral-sh/setup-uv@v7
|
|
53
|
+
|
|
54
|
+
- name: Build distributions
|
|
55
|
+
if: steps.ver.outputs.version != ''
|
|
56
|
+
run: uv build
|
|
57
|
+
|
|
58
|
+
- name: Upload distributions
|
|
59
|
+
if: steps.ver.outputs.version != ''
|
|
60
|
+
uses: actions/upload-artifact@v7
|
|
61
|
+
with:
|
|
62
|
+
name: dist
|
|
63
|
+
path: dist/
|
|
64
|
+
|
|
65
|
+
publish:
|
|
66
|
+
needs: build
|
|
67
|
+
if: needs.build.outputs.version != ''
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
environment:
|
|
70
|
+
name: pypi
|
|
71
|
+
url: https://pypi.org/project/datoon/
|
|
72
|
+
steps:
|
|
73
|
+
- name: Download distributions
|
|
74
|
+
uses: actions/download-artifact@v8
|
|
75
|
+
with:
|
|
76
|
+
name: dist
|
|
77
|
+
path: dist/
|
|
78
|
+
|
|
79
|
+
- name: Publish to PyPI
|
|
80
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
81
|
+
with:
|
|
82
|
+
skip-existing: true
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.7.1](https://github.com/andrii-su/datoon/compare/v1.7.0...v1.7.1) (2026-06-22)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **mcp:** report datoon version in the MCP initialize handshake ([22ba5fd](https://github.com/andrii-su/datoon/commit/22ba5fd23071cf2fa6a2d2c51d306d761dce9dc4))
|
|
7
|
+
|
|
1
8
|
# [1.7.0](https://github.com/andrii-su/datoon/compare/v1.6.0...v1.7.0) (2026-06-22)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -22,17 +22,25 @@ ______________________________________________________________________
|
|
|
22
22
|
[`README.md`](./README.md) (PyPI renders the README as the package description,
|
|
23
23
|
which the registry validates).
|
|
24
24
|
- **Publishing:** [`.github/workflows/publish-mcp.yml`](./.github/workflows/publish-mcp.yml)
|
|
25
|
-
runs
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
runs when the **Release** workflow completes (via `workflow_run`), and only
|
|
26
|
+
when main HEAD carries a new version tag. It syncs `server.json`'s version to
|
|
27
|
+
that tag, validates, waits for the version to appear on PyPI, authenticates via
|
|
28
|
+
**GitHub OIDC** (no stored secret), and runs `mcp-publisher publish`.
|
|
28
29
|
|
|
29
30
|
> [!NOTE]
|
|
30
|
-
>
|
|
31
|
-
>
|
|
32
|
-
>
|
|
33
|
-
>
|
|
31
|
+
> **Trigger note.** Releases are cut by semantic-release using `GITHUB_TOKEN`,
|
|
32
|
+
> and GitHub does not fire `release: published` for `GITHUB_TOKEN`-created
|
|
33
|
+
> events. Both [`publish.yml`](./.github/workflows/publish.yml) (PyPI) and
|
|
34
|
+
> publish-mcp.yml therefore key off the **Release** workflow's completion
|
|
35
|
+
> instead, gated on a new tag at HEAD.
|
|
34
36
|
|
|
35
|
-
|
|
37
|
+
> [!NOTE]
|
|
38
|
+
> The ownership token first reaches PyPI with the release that includes the
|
|
39
|
+
> marketplace change. The first successful publish happens on the next release
|
|
40
|
+
> after that merge.
|
|
41
|
+
|
|
42
|
+
Manual publish — **Publish to MCP Registry** workflow → **Run workflow**
|
|
43
|
+
(`workflow_dispatch`); it publishes the latest tag. Or locally:
|
|
36
44
|
|
|
37
45
|
```bash
|
|
38
46
|
# Install mcp-publisher (see modelcontextprotocol/registry releases)
|
|
@@ -41,8 +49,6 @@ mcp-publisher login github # interactive OAuth, namespace io.github.andri
|
|
|
41
49
|
mcp-publisher publish
|
|
42
50
|
```
|
|
43
51
|
|
|
44
|
-
Re-run via the **Publish to MCP Registry** workflow's `workflow_dispatch`.
|
|
45
|
-
|
|
46
52
|
______________________________________________________________________
|
|
47
53
|
|
|
48
54
|
## 2. Smithery — one-time connect
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.7.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 7,
|
|
21
|
+
__version__ = version = '1.7.1'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 7, 1)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g7a983c8dc'
|
|
@@ -12,6 +12,7 @@ except ImportError as exc:
|
|
|
12
12
|
"MCP support requires the 'mcp' extra: pip install datoon[mcp]"
|
|
13
13
|
) from exc
|
|
14
14
|
|
|
15
|
+
from datoon import __version__
|
|
15
16
|
from datoon.analyzer import analyze_payload
|
|
16
17
|
from datoon.converter import DatoonError, convert_json_for_llm
|
|
17
18
|
from datoon.models import ConversionConfig
|
|
@@ -25,6 +26,10 @@ mcp = FastMCP(
|
|
|
25
26
|
"Use analyze_json to check if a payload is a good TOON candidate without converting."
|
|
26
27
|
),
|
|
27
28
|
)
|
|
29
|
+
# FastMCP has no `version` parameter; set it on the underlying server so the
|
|
30
|
+
# MCP `initialize` handshake reports datoon's version instead of the mcp
|
|
31
|
+
# library's default.
|
|
32
|
+
mcp._mcp_server.version = __version__
|
|
28
33
|
|
|
29
34
|
|
|
30
35
|
@mcp.tool()
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
name: Publish to PyPI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
release:
|
|
5
|
-
types: [published]
|
|
6
|
-
|
|
7
|
-
permissions:
|
|
8
|
-
contents: read
|
|
9
|
-
id-token: write
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
build:
|
|
13
|
-
runs-on: ubuntu-latest
|
|
14
|
-
steps:
|
|
15
|
-
- uses: actions/checkout@v6
|
|
16
|
-
with:
|
|
17
|
-
fetch-depth: 0
|
|
18
|
-
|
|
19
|
-
- name: Install uv
|
|
20
|
-
uses: astral-sh/setup-uv@v7
|
|
21
|
-
|
|
22
|
-
- name: Build distributions
|
|
23
|
-
run: uv build
|
|
24
|
-
|
|
25
|
-
- name: Upload distributions
|
|
26
|
-
uses: actions/upload-artifact@v7
|
|
27
|
-
with:
|
|
28
|
-
name: dist
|
|
29
|
-
path: dist/
|
|
30
|
-
|
|
31
|
-
publish:
|
|
32
|
-
needs: build
|
|
33
|
-
runs-on: ubuntu-latest
|
|
34
|
-
environment:
|
|
35
|
-
name: pypi
|
|
36
|
-
url: https://pypi.org/project/datoon/
|
|
37
|
-
steps:
|
|
38
|
-
- name: Download distributions
|
|
39
|
-
uses: actions/download-artifact@v8
|
|
40
|
-
with:
|
|
41
|
-
name: dist
|
|
42
|
-
path: dist/
|
|
43
|
-
|
|
44
|
-
- name: Publish to PyPI
|
|
45
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|