world-reference-mcp 0.3.2__tar.gz → 0.3.4__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.
- {world_reference_mcp-0.3.2/world_reference_mcp.egg-info → world_reference_mcp-0.3.4}/PKG-INFO +3 -3
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/README.md +1 -1
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/pyproject.toml +5 -4
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_adapter_conformance.py +1 -1
- world_reference_mcp-0.3.4/tests/test_default_content_surfaces.py +43 -0
- world_reference_mcp-0.3.4/tests/test_startup.py +13 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/_version.py +1 -1
- world_reference_mcp-0.3.4/world_reference_mcp/connector_sources.py +251 -0
- world_reference_mcp-0.3.4/world_reference_mcp/connectors/__init__.py +1 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/certification.json +0 -3
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/world_reference.ttl +2 -3
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/prompts/main_agent.json +0 -2
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/prompts/world_reference_specialist.json +0 -2
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4/world_reference_mcp.egg-info}/PKG-INFO +3 -3
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/SOURCES.txt +2 -5
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/entry_points.txt +3 -3
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/requires.txt +1 -1
- world_reference_mcp-0.3.2/scripts/compute_tool_fingerprints.py +0 -79
- world_reference_mcp-0.3.2/tests/test_presets_and_adapters.py +0 -67
- world_reference_mcp-0.3.2/tests/test_startup.py +0 -28
- world_reference_mcp-0.3.2/world_reference_mcp/connectors/__init__.py +0 -14
- world_reference_mcp-0.3.2/world_reference_mcp/connectors/adapters.py +0 -81
- world_reference_mcp-0.3.2/world_reference_mcp/connectors/mcp_source_presets.json +0 -312
- world_reference_mcp-0.3.2/world_reference_mcp/connectors/tool_schema_fingerprints.json +0 -14
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/LICENSE +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/scripts/security_sanitizer.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/setup.cfg +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/conftest.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_fdc.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_gbif.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_inaturalist.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_ncbi_taxonomy.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_noaa.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_ols4.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_open_meteo.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_wikidata.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_concept_parity.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_init_dynamics.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_sdk_rate_limiter.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/__init__.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/__main__.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/__init__.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/fdc.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/gbif.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/inaturalist.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/ncbi_taxonomy.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/noaa.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/ols4.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/open_meteo.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/wikidata.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/config.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/credentials.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/errors.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/http_clients.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/__init__.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/clients.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/server.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_nutrition.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_observations.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_taxonomy.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_terms.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_wikidata.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp_config.json +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp_server.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/__init__.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/fixtures/records.json +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/mappings/source.yaml +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/migrations/manifest.json +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/shapes/connector.shacl.ttl +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/prompts/__init__.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/__init__.py +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-alignment/SKILL.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-alignment/WORKFLOW.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-mcp-operations/SKILL.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-mcp-operations/agents/openai.yaml +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-mcp-operations/references/catalog.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-nutrition/SKILL.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-nutrition/WORKFLOW.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-observations/SKILL.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-observations/WORKFLOW.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-taxonomy/SKILL.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-taxonomy/WORKFLOW.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-terms/SKILL.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-terms/WORKFLOW.md +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/dependency_links.txt +0 -0
- {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/top_level.txt +0 -0
{world_reference_mcp-0.3.2/world_reference_mcp.egg-info → world_reference_mcp-0.3.4}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: world-reference-mcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: World-reference data (taxonomy, OBO terms, nutrition, observations, Wikidata alignment) MCP server and agent-connector-sdk source adapters
|
|
5
5
|
Author-email: Project Maintainers <maintainers@users.noreply.github.com>
|
|
6
6
|
License: MIT
|
|
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
12
12
|
Requires-Python: <3.15,>=3.12
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
15
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
16
16
|
Requires-Dist: httpx>=0.28.1
|
|
17
17
|
Provides-Extra: test
|
|
18
18
|
Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
|
|
@@ -23,7 +23,7 @@ Dynamic: license-file
|
|
|
23
23
|
|
|
24
24
|
# world-reference-mcp
|
|
25
25
|
|
|
26
|
-
*Version: 0.3.
|
|
26
|
+
*Version: 0.3.4*
|
|
27
27
|
|
|
28
28
|
World-reference data — organism taxonomy, OBO reference terms, food/nutrition
|
|
29
29
|
composition, organism and weather observations, and Wikidata alignment — as an
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "world-reference-mcp"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.4"
|
|
8
8
|
description = "World-reference data (taxonomy, OBO terms, nutrition, observations, Wikidata alignment) MCP server and agent-connector-sdk source adapters"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
classifiers = [
|
|
@@ -16,7 +16,7 @@ classifiers = [
|
|
|
16
16
|
]
|
|
17
17
|
requires-python = ">=3.12, <3.15"
|
|
18
18
|
dependencies = [
|
|
19
|
-
"agent-connector-sdk[mcp]>=0.
|
|
19
|
+
"agent-connector-sdk[mcp]>=0.4.1,<1.0.0",
|
|
20
20
|
"httpx>=0.28.1",
|
|
21
21
|
]
|
|
22
22
|
|
|
@@ -42,8 +42,9 @@ world-reference-mcp = "world_reference_mcp.ontology"
|
|
|
42
42
|
[project.entry-points."agent_connector_sdk.prompt_providers"]
|
|
43
43
|
world-reference-mcp = "world_reference_mcp.prompts"
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
# The one declared connector identity: the fleet name (SDK-CONNECTOR-CONTROL-R071).
|
|
46
|
+
[project.entry-points."agent_connector_sdk.connector"]
|
|
47
|
+
world-reference-mcp = "world_reference_mcp"
|
|
47
48
|
|
|
48
49
|
[tool.uv.workspace]
|
|
49
50
|
members = ["."]
|
|
@@ -103,7 +103,7 @@ async def _verified_adapter(sessions: SessionFactory) -> McpToolSourceAdapter:
|
|
|
103
103
|
preset,
|
|
104
104
|
connector="world-reference-mcp",
|
|
105
105
|
tool_schema_sha256=live.compatibility_sha256,
|
|
106
|
-
mapping_reference="
|
|
106
|
+
mapping_reference="connector:world-reference-mcp#mappings/taxon_ncbi_small",
|
|
107
107
|
schema_mappings={"taxon_ncbi_small": SchemaMapping(ontology_class="Taxon")},
|
|
108
108
|
)
|
|
109
109
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""CONN-WORLD-REFERENCE-MCP-CONNECTOR-CONTENT-R001: the server lists its packaged skills, ontology and prompts by default."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import importlib
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
from fastmcp import Client
|
|
11
|
+
|
|
12
|
+
PACKAGE = "world_reference_mcp"
|
|
13
|
+
ROOT = Path(list(importlib.import_module(PACKAGE).__path__)[0])
|
|
14
|
+
|
|
15
|
+
pytestmark = pytest.mark.spec("CONN-WORLD-REFERENCE-MCP-CONNECTOR-CONTENT-R001")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _server():
|
|
19
|
+
namespace = {"__name__": PACKAGE + ".mcp_server"}
|
|
20
|
+
exec(
|
|
21
|
+
"from agent_connector_sdk.mcp.server import create_mcp_server\n"
|
|
22
|
+
"result = create_mcp_server('world-reference-mcp', version='0', command_args=[])",
|
|
23
|
+
namespace,
|
|
24
|
+
)
|
|
25
|
+
return namespace["result"][1]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
async def _listings():
|
|
29
|
+
async with Client(_server()) as client:
|
|
30
|
+
resources = {str(r.uri) for r in await client.list_resources()}
|
|
31
|
+
prompts = {p.name for p in await client.list_prompts()}
|
|
32
|
+
return resources, prompts
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_default_content_surfaces() -> None:
|
|
36
|
+
resources, prompts = asyncio.run(_listings())
|
|
37
|
+
if list(ROOT.glob("skills/*/SKILL.md")):
|
|
38
|
+
assert any(u.startswith("skill://") for u in resources)
|
|
39
|
+
if list(ROOT.glob("ontology/*.ttl")):
|
|
40
|
+
assert any(u.startswith("ontology://world-reference-mcp/") for u in resources)
|
|
41
|
+
for path in ROOT.glob("prompts/*.json"):
|
|
42
|
+
if not path.name.startswith("_"):
|
|
43
|
+
assert path.stem in prompts
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Import-time smoke test and a bare server-build smoke test."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_build_server_with_no_auth_configured() -> None:
|
|
7
|
+
from world_reference_mcp.mcp.server import build_server
|
|
8
|
+
|
|
9
|
+
mcp, args, middlewares, clients = build_server(command_args=[])
|
|
10
|
+
assert mcp.name == "world-reference-mcp"
|
|
11
|
+
assert args.transport == "stdio"
|
|
12
|
+
assert isinstance(middlewares, list)
|
|
13
|
+
assert clients.ncbi.config.base_url.endswith("eutils")
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"""Data sources of this connector, declared by tool name (generated by connector-ontology-map migrate).
|
|
2
|
+
|
|
3
|
+
Served live as ``connector://resources``. Regenerate by editing the declarations, not the tools.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ruff: noqa: E501
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from agent_connector_sdk.ingest.live_declaration import source_meta
|
|
12
|
+
from agent_connector_sdk.ingest.sources import IngestSourceDeclaration, IngestSourceSpec
|
|
13
|
+
|
|
14
|
+
CONNECTOR: str = "world-reference-mcp"
|
|
15
|
+
|
|
16
|
+
SOURCES: tuple[Any, ...] = (
|
|
17
|
+
source_meta(
|
|
18
|
+
tool="fdc_food_search",
|
|
19
|
+
source_id="food_fdc",
|
|
20
|
+
record_type="food",
|
|
21
|
+
id_field="fdc_id",
|
|
22
|
+
page_param="page_number",
|
|
23
|
+
page_size_param="page_size",
|
|
24
|
+
pagination="page",
|
|
25
|
+
preset={
|
|
26
|
+
"arguments": {
|
|
27
|
+
"query": "*",
|
|
28
|
+
},
|
|
29
|
+
"doc_type": "food",
|
|
30
|
+
"ontology_class": "FoodCompositionRecord",
|
|
31
|
+
"page_kind": "number",
|
|
32
|
+
"page_size": 50,
|
|
33
|
+
"params_style": "args",
|
|
34
|
+
"start_page": 1,
|
|
35
|
+
},
|
|
36
|
+
records_path="items",
|
|
37
|
+
server="world-reference-mcp",
|
|
38
|
+
title_field="description",
|
|
39
|
+
),
|
|
40
|
+
source_meta(
|
|
41
|
+
tool="gbif_occurrence_search",
|
|
42
|
+
source_id="organism_observation_gbif",
|
|
43
|
+
record_type="organism_observation",
|
|
44
|
+
id_field="occurrence_id",
|
|
45
|
+
cursor_field="last_parsed",
|
|
46
|
+
preset={
|
|
47
|
+
"arguments": {
|
|
48
|
+
"scientific_name": "Vulpes vulpes",
|
|
49
|
+
},
|
|
50
|
+
"doc_type": "organism_observation",
|
|
51
|
+
"ontology_class": "OrganismObservation",
|
|
52
|
+
"page_param": "offset",
|
|
53
|
+
"page_size": 100,
|
|
54
|
+
"page_size_param": "limit",
|
|
55
|
+
"pagination": "offset",
|
|
56
|
+
"params_style": "args",
|
|
57
|
+
},
|
|
58
|
+
records_path="items",
|
|
59
|
+
server="world-reference-mcp",
|
|
60
|
+
),
|
|
61
|
+
source_meta(
|
|
62
|
+
tool="inaturalist_observation_search",
|
|
63
|
+
source_id="organism_observation_inaturalist",
|
|
64
|
+
record_type="organism_observation",
|
|
65
|
+
id_field="observation_id",
|
|
66
|
+
cursor_field="time_observed_at",
|
|
67
|
+
page_param="page",
|
|
68
|
+
page_size_param="per_page",
|
|
69
|
+
pagination="page",
|
|
70
|
+
preset={
|
|
71
|
+
"arguments": {
|
|
72
|
+
"taxon_name": "Vulpes vulpes",
|
|
73
|
+
},
|
|
74
|
+
"doc_type": "organism_observation",
|
|
75
|
+
"ontology_class": "OrganismObservation",
|
|
76
|
+
"page_kind": "number",
|
|
77
|
+
"page_size": 50,
|
|
78
|
+
"params_style": "args",
|
|
79
|
+
"start_page": 1,
|
|
80
|
+
},
|
|
81
|
+
records_path="items",
|
|
82
|
+
server="world-reference-mcp",
|
|
83
|
+
),
|
|
84
|
+
source_meta(
|
|
85
|
+
tool="reference_term_list",
|
|
86
|
+
source_id="reference_term_uberon",
|
|
87
|
+
record_type="reference_term",
|
|
88
|
+
id_field="iri",
|
|
89
|
+
page_param="page",
|
|
90
|
+
page_size_param="size",
|
|
91
|
+
pagination="page",
|
|
92
|
+
preset={
|
|
93
|
+
"arguments": {
|
|
94
|
+
"ontology": "uberon",
|
|
95
|
+
},
|
|
96
|
+
"doc_type": "reference_term",
|
|
97
|
+
"ontology_class": "AnatomyTerm",
|
|
98
|
+
"page_kind": "number",
|
|
99
|
+
"page_size": 100,
|
|
100
|
+
"params_style": "args",
|
|
101
|
+
"start_page": 0,
|
|
102
|
+
},
|
|
103
|
+
records_path="items",
|
|
104
|
+
server="world-reference-mcp",
|
|
105
|
+
title_field="label",
|
|
106
|
+
),
|
|
107
|
+
source_meta(
|
|
108
|
+
tool="taxonomy_gbif_search",
|
|
109
|
+
source_id="taxon_gbif",
|
|
110
|
+
record_type="taxon",
|
|
111
|
+
id_field="gbif_taxon_key",
|
|
112
|
+
preset={
|
|
113
|
+
"arguments": {
|
|
114
|
+
"query": "Mammalia",
|
|
115
|
+
"rank": "SPECIES",
|
|
116
|
+
},
|
|
117
|
+
"doc_type": "taxon",
|
|
118
|
+
"ontology_class": "Taxon",
|
|
119
|
+
"page_param": "offset",
|
|
120
|
+
"page_size": 100,
|
|
121
|
+
"page_size_param": "limit",
|
|
122
|
+
"pagination": "offset",
|
|
123
|
+
"params_style": "args",
|
|
124
|
+
},
|
|
125
|
+
records_path="items",
|
|
126
|
+
server="world-reference-mcp",
|
|
127
|
+
title_field="scientific_name",
|
|
128
|
+
),
|
|
129
|
+
source_meta(
|
|
130
|
+
tool="taxonomy_ncbi_search",
|
|
131
|
+
source_id="taxon_ncbi",
|
|
132
|
+
record_type="taxon",
|
|
133
|
+
id_field="ncbi_taxon_id",
|
|
134
|
+
cursor_field="modification_date",
|
|
135
|
+
preset={
|
|
136
|
+
"arguments": {
|
|
137
|
+
"term": "Mammalia[Subtree]",
|
|
138
|
+
},
|
|
139
|
+
"doc_type": "taxon",
|
|
140
|
+
"ontology_class": "Taxon",
|
|
141
|
+
"page_param": "retstart",
|
|
142
|
+
"page_size": 50,
|
|
143
|
+
"page_size_param": "retmax",
|
|
144
|
+
"pagination": "offset",
|
|
145
|
+
"params_style": "args",
|
|
146
|
+
"updated_since_param": "modified_since",
|
|
147
|
+
},
|
|
148
|
+
records_path="items",
|
|
149
|
+
server="world-reference-mcp",
|
|
150
|
+
title_field="scientific_name",
|
|
151
|
+
),
|
|
152
|
+
source_meta(
|
|
153
|
+
tool="noaa_ghcnd_daily",
|
|
154
|
+
source_id="weather_observation_noaa",
|
|
155
|
+
record_type="weather_observation",
|
|
156
|
+
id_field="observation_id",
|
|
157
|
+
preset={
|
|
158
|
+
"arguments": {
|
|
159
|
+
"end_date": "2026-01-31",
|
|
160
|
+
"start_date": "2026-01-01",
|
|
161
|
+
"station_id": "GHCND:USW00023174",
|
|
162
|
+
},
|
|
163
|
+
"doc_type": "weather_observation",
|
|
164
|
+
"ontology_class": "WeatherObservation",
|
|
165
|
+
"page_param": "offset",
|
|
166
|
+
"page_size": 200,
|
|
167
|
+
"page_size_param": "limit",
|
|
168
|
+
"pagination": "offset",
|
|
169
|
+
"params_style": "args",
|
|
170
|
+
},
|
|
171
|
+
records_path="items",
|
|
172
|
+
server="world-reference-mcp",
|
|
173
|
+
),
|
|
174
|
+
source_meta(
|
|
175
|
+
tool="open_meteo_weather_observation",
|
|
176
|
+
source_id="weather_observation_open_meteo",
|
|
177
|
+
record_type="weather_observation",
|
|
178
|
+
id_field="observation_date",
|
|
179
|
+
preset={
|
|
180
|
+
"arguments": {
|
|
181
|
+
"latitude": 52.52,
|
|
182
|
+
"longitude": 13.405,
|
|
183
|
+
"window_days": 30,
|
|
184
|
+
},
|
|
185
|
+
"cursor_param": "start_date",
|
|
186
|
+
"cursor_path": "next_cursor",
|
|
187
|
+
"doc_type": "weather_observation",
|
|
188
|
+
"ontology_class": "WeatherObservation",
|
|
189
|
+
"pagination": "cursor",
|
|
190
|
+
"params_style": "args",
|
|
191
|
+
},
|
|
192
|
+
records_path="items",
|
|
193
|
+
server="world-reference-mcp",
|
|
194
|
+
),
|
|
195
|
+
source_meta(
|
|
196
|
+
tool="wikidata_alignment_search",
|
|
197
|
+
source_id="wikidata_alignment_taxon_ncbi",
|
|
198
|
+
record_type="wikidata_alignment",
|
|
199
|
+
id_field="wikidata_id",
|
|
200
|
+
preset={
|
|
201
|
+
"arguments": {
|
|
202
|
+
"entity_type": "taxon_ncbi",
|
|
203
|
+
},
|
|
204
|
+
"doc_type": "wikidata_alignment",
|
|
205
|
+
"ontology_class": "Taxon",
|
|
206
|
+
"page_param": "offset",
|
|
207
|
+
"page_size": 100,
|
|
208
|
+
"page_size_param": "limit",
|
|
209
|
+
"pagination": "offset",
|
|
210
|
+
"params_style": "args",
|
|
211
|
+
},
|
|
212
|
+
records_path="items",
|
|
213
|
+
server="world-reference-mcp",
|
|
214
|
+
title_field="label",
|
|
215
|
+
),
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
SCHEMA_MAPPINGS: dict[str, Any] = {
|
|
219
|
+
"ReferenceSyncRun": {
|
|
220
|
+
"fields": {},
|
|
221
|
+
"ontology_class": None,
|
|
222
|
+
},
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
RESOURCES: tuple[dict[str, str], ...] = (
|
|
226
|
+
{
|
|
227
|
+
"id_prefix": "referencesyncrun",
|
|
228
|
+
"label": "Reference Sync Run",
|
|
229
|
+
"name": "ReferenceSyncRun",
|
|
230
|
+
},
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
def declaration() -> IngestSourceDeclaration:
|
|
235
|
+
"""The declaration the server assembles from this module."""
|
|
236
|
+
specs: list[IngestSourceSpec] = []
|
|
237
|
+
for item in SOURCES:
|
|
238
|
+
for entry in item["connector_sources"]:
|
|
239
|
+
body: dict[str, Any] = {
|
|
240
|
+
k: v for k, v in entry.items() if k not in ("tool", "mapping")
|
|
241
|
+
}
|
|
242
|
+
spec = {**body, "tools": (entry["tool"],)}
|
|
243
|
+
specs.append(IngestSourceSpec.model_validate(spec))
|
|
244
|
+
return IngestSourceDeclaration.model_validate(
|
|
245
|
+
{
|
|
246
|
+
"connector": CONNECTOR,
|
|
247
|
+
"sources": specs,
|
|
248
|
+
"schema_mappings": SCHEMA_MAPPINGS,
|
|
249
|
+
"resources": RESOURCES,
|
|
250
|
+
}
|
|
251
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Connector package; the data sources are declared in ``world_reference_mcp.connector_sources``."""
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"api_version": "arbora.io/v1",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"connector_manifest.yml": "55d3adcd6e44770c9e88c10d799cd3467139d38c1d57004e7c45ab30e4eea697",
|
|
5
|
-
"world_reference_mcp/connectors/mcp_source_presets.json": "8bda3239bc749241467d9986d7cd684c3af55e297c312b4cb6dee1c176762fd8",
|
|
6
|
-
"world_reference_mcp/connectors/tool_schema_fingerprints.json": "c4701082264f0b47f47322ad2fe20137b1832f95a0ec09e7aa19dea13bacf82d",
|
|
7
4
|
"world_reference_mcp/ontology/fixtures/records.json": "3b7253452b8991f268716eb6e0e161089ef1bcb79dd283c0cff5ec905fc82da6",
|
|
8
5
|
"world_reference_mcp/ontology/mappings/source.yaml": "d7361816d2bbac3bbd7bc2ebbcab6985b30afa6d61b67d3e12d051319268b5a0",
|
|
9
6
|
"world_reference_mcp/ontology/migrations/manifest.json": "d0de575ae95abdf603f03178e734527e0d82cbd48b6d0a92ad1dca9b56d49efa",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
# (crates/eg-core/ontology/{life,environment,nutrition}-v1.ttl) on EG branch
|
|
15
15
|
# `feat/world-model-ontology`. This connector maps each of its 17 declared
|
|
16
16
|
# streams onto one of those existing classes through
|
|
17
|
-
# `connectors/
|
|
17
|
+
# `connectors/world_reference_mcp.connector_sources`'s `ontology_class` hint, resolved at
|
|
18
18
|
# runtime by `world_reference_mcp.connectors.adapters.build_schema_mappings`
|
|
19
19
|
# — never by duplicating the class here. See AGENTS.md "Ontology mapping".
|
|
20
20
|
|
|
@@ -38,5 +38,4 @@
|
|
|
38
38
|
federated into the agent-utilities knowledge-graph hub. The world-model
|
|
39
39
|
domain classes each stream lands on are epistemic-graph-owned; this
|
|
40
40
|
ontology models only this connector's own admin state, not a second copy
|
|
41
|
-
of that domain."""
|
|
42
|
-
owl:imports <http://knuckles.team/kg> .
|
|
41
|
+
of that domain.""" .
|
{world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/prompts/main_agent.json
RENAMED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
"type": "prompt",
|
|
5
5
|
"source": "world-reference-mcp",
|
|
6
6
|
"description": "World-reference data (taxonomy, OBO terms, nutrition, observations, Wikidata alignment) MCP Server",
|
|
7
|
-
"extends": "agent-utilities:base",
|
|
8
|
-
"compose": "append",
|
|
9
7
|
"identity": {
|
|
10
8
|
"role": "World Reference Agent",
|
|
11
9
|
"goal": "World-reference data (taxonomy, OBO terms, nutrition, observations, Wikidata alignment) MCP Server"
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
"schema_version": "1.0",
|
|
5
5
|
"prompt_version": "0.2.0",
|
|
6
6
|
"source": "world-reference-mcp",
|
|
7
|
-
"extends": "agent-utilities:base",
|
|
8
|
-
"compose": "append",
|
|
9
7
|
"description": "World-reference specialist: organism taxonomy, OBO reference terms, food composition, organism/weather observations, and Wikidata cross-source alignment over the world-reference-mcp MCP server.",
|
|
10
8
|
"metadata": {
|
|
11
9
|
"topic": "World-reference data (taxonomy, ontology terms, nutrition, observations, alignment)",
|
{world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4/world_reference_mcp.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: world-reference-mcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: World-reference data (taxonomy, OBO terms, nutrition, observations, Wikidata alignment) MCP server and agent-connector-sdk source adapters
|
|
5
5
|
Author-email: Project Maintainers <maintainers@users.noreply.github.com>
|
|
6
6
|
License: MIT
|
|
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
12
12
|
Requires-Python: <3.15,>=3.12
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
15
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
16
16
|
Requires-Dist: httpx>=0.28.1
|
|
17
17
|
Provides-Extra: test
|
|
18
18
|
Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
|
|
@@ -23,7 +23,7 @@ Dynamic: license-file
|
|
|
23
23
|
|
|
24
24
|
# world-reference-mcp
|
|
25
25
|
|
|
26
|
-
*Version: 0.3.
|
|
26
|
+
*Version: 0.3.4*
|
|
27
27
|
|
|
28
28
|
World-reference data — organism taxonomy, OBO reference terms, food/nutrition
|
|
29
29
|
composition, organism and weather observations, and Wikidata alignment — as an
|
{world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/SOURCES.txt
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
LICENSE
|
|
2
2
|
README.md
|
|
3
3
|
pyproject.toml
|
|
4
|
-
scripts/compute_tool_fingerprints.py
|
|
5
4
|
scripts/security_sanitizer.py
|
|
6
5
|
tests/conftest.py
|
|
7
6
|
tests/test_adapter_conformance.py
|
|
@@ -14,14 +13,15 @@ tests/test_api_ols4.py
|
|
|
14
13
|
tests/test_api_open_meteo.py
|
|
15
14
|
tests/test_api_wikidata.py
|
|
16
15
|
tests/test_concept_parity.py
|
|
16
|
+
tests/test_default_content_surfaces.py
|
|
17
17
|
tests/test_init_dynamics.py
|
|
18
|
-
tests/test_presets_and_adapters.py
|
|
19
18
|
tests/test_sdk_rate_limiter.py
|
|
20
19
|
tests/test_startup.py
|
|
21
20
|
world_reference_mcp/__init__.py
|
|
22
21
|
world_reference_mcp/__main__.py
|
|
23
22
|
world_reference_mcp/_version.py
|
|
24
23
|
world_reference_mcp/config.py
|
|
24
|
+
world_reference_mcp/connector_sources.py
|
|
25
25
|
world_reference_mcp/credentials.py
|
|
26
26
|
world_reference_mcp/errors.py
|
|
27
27
|
world_reference_mcp/http_clients.py
|
|
@@ -43,9 +43,6 @@ world_reference_mcp/api/ols4.py
|
|
|
43
43
|
world_reference_mcp/api/open_meteo.py
|
|
44
44
|
world_reference_mcp/api/wikidata.py
|
|
45
45
|
world_reference_mcp/connectors/__init__.py
|
|
46
|
-
world_reference_mcp/connectors/adapters.py
|
|
47
|
-
world_reference_mcp/connectors/mcp_source_presets.json
|
|
48
|
-
world_reference_mcp/connectors/tool_schema_fingerprints.json
|
|
49
46
|
world_reference_mcp/mcp/__init__.py
|
|
50
47
|
world_reference_mcp/mcp/clients.py
|
|
51
48
|
world_reference_mcp/mcp/server.py
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
[agent_connector_sdk.connector]
|
|
2
|
+
world-reference-mcp = world_reference_mcp
|
|
3
|
+
|
|
1
4
|
[agent_connector_sdk.ontology_providers]
|
|
2
5
|
world-reference-mcp = world_reference_mcp.ontology
|
|
3
6
|
|
|
@@ -7,8 +10,5 @@ world-reference-mcp = world_reference_mcp.prompts
|
|
|
7
10
|
[agent_connector_sdk.skill_providers]
|
|
8
11
|
world-reference-mcp = world_reference_mcp.skills
|
|
9
12
|
|
|
10
|
-
[agent_connector_sdk.source_connector_providers]
|
|
11
|
-
world-reference-mcp = world_reference_mcp.connectors
|
|
12
|
-
|
|
13
13
|
[console_scripts]
|
|
14
14
|
world-reference-mcp = world_reference_mcp.mcp_server:mcp_server
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Regenerate ``connectors/tool_schema_fingerprints.json`` from the live tool surface.
|
|
3
|
-
|
|
4
|
-
Connects an in-process FastMCP client to a plain server carrying this
|
|
5
|
-
package's nine tools (no auth/network/fleet-registration wiring — those are
|
|
6
|
-
concerns of ``agent_connector_sdk.mcp.server.create_mcp_server``, irrelevant
|
|
7
|
-
to a tool's client-visible schema) and fingerprints exactly what a real
|
|
8
|
-
client's ``tools/list`` would see, via
|
|
9
|
-
``agent_connector_sdk.certify.fingerprints.tool_fingerprint`` — the same
|
|
10
|
-
function ``discover()`` verifies against at extraction time.
|
|
11
|
-
|
|
12
|
-
Run after changing any tool's signature or docstring-derived schema:
|
|
13
|
-
|
|
14
|
-
uv run --frozen python scripts/compute_tool_fingerprints.py --apply
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
from __future__ import annotations
|
|
18
|
-
|
|
19
|
-
import argparse
|
|
20
|
-
import asyncio
|
|
21
|
-
import json
|
|
22
|
-
from pathlib import Path
|
|
23
|
-
|
|
24
|
-
from agent_connector_sdk.certify.fingerprints import tool_fingerprint
|
|
25
|
-
from fastmcp import Client, FastMCP
|
|
26
|
-
|
|
27
|
-
from world_reference_mcp.mcp.clients import Clients
|
|
28
|
-
from world_reference_mcp.mcp.tools_nutrition import register_nutrition_tools
|
|
29
|
-
from world_reference_mcp.mcp.tools_observations import register_observation_tools
|
|
30
|
-
from world_reference_mcp.mcp.tools_taxonomy import register_taxonomy_tools
|
|
31
|
-
from world_reference_mcp.mcp.tools_terms import register_term_tools
|
|
32
|
-
from world_reference_mcp.mcp.tools_wikidata import register_wikidata_tools
|
|
33
|
-
|
|
34
|
-
_OUTPUT = Path(__file__).resolve().parent.parent / (
|
|
35
|
-
"world_reference_mcp/connectors/tool_schema_fingerprints.json"
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def _bare_server() -> FastMCP:
|
|
40
|
-
mcp: FastMCP = FastMCP("world-reference-mcp")
|
|
41
|
-
clients = Clients()
|
|
42
|
-
register_taxonomy_tools(mcp, clients)
|
|
43
|
-
register_term_tools(mcp, clients)
|
|
44
|
-
register_nutrition_tools(mcp, clients)
|
|
45
|
-
register_observation_tools(mcp, clients)
|
|
46
|
-
register_wikidata_tools(mcp, clients)
|
|
47
|
-
return mcp
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
async def _fingerprints() -> dict[str, str]:
|
|
51
|
-
mcp = _bare_server()
|
|
52
|
-
async with Client(mcp) as client:
|
|
53
|
-
tools = await client.list_tools()
|
|
54
|
-
return {tool.name: tool_fingerprint(tool) for tool in tools}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def main() -> int:
|
|
58
|
-
parser = argparse.ArgumentParser(description=__doc__)
|
|
59
|
-
parser.add_argument("--apply", action="store_true", help="write the output file")
|
|
60
|
-
args = parser.parse_args()
|
|
61
|
-
fingerprints = asyncio.run(_fingerprints())
|
|
62
|
-
document = {
|
|
63
|
-
"_comment": (
|
|
64
|
-
"Generated by scripts/compute_tool_fingerprints.py from the live "
|
|
65
|
-
"tools/list schema. Never hand-edit."
|
|
66
|
-
),
|
|
67
|
-
"tools": dict(sorted(fingerprints.items())),
|
|
68
|
-
}
|
|
69
|
-
text = json.dumps(document, indent=2, sort_keys=False) + "\n"
|
|
70
|
-
if args.apply:
|
|
71
|
-
_OUTPUT.write_text(text)
|
|
72
|
-
print(f"wrote {_OUTPUT}")
|
|
73
|
-
else:
|
|
74
|
-
print(text)
|
|
75
|
-
return 0
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if __name__ == "__main__":
|
|
79
|
-
raise SystemExit(main())
|