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.
Files changed (86) hide show
  1. {world_reference_mcp-0.3.2/world_reference_mcp.egg-info → world_reference_mcp-0.3.4}/PKG-INFO +3 -3
  2. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/README.md +1 -1
  3. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/pyproject.toml +5 -4
  4. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_adapter_conformance.py +1 -1
  5. world_reference_mcp-0.3.4/tests/test_default_content_surfaces.py +43 -0
  6. world_reference_mcp-0.3.4/tests/test_startup.py +13 -0
  7. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/_version.py +1 -1
  8. world_reference_mcp-0.3.4/world_reference_mcp/connector_sources.py +251 -0
  9. world_reference_mcp-0.3.4/world_reference_mcp/connectors/__init__.py +1 -0
  10. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/certification.json +0 -3
  11. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/world_reference.ttl +2 -3
  12. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/prompts/main_agent.json +0 -2
  13. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/prompts/world_reference_specialist.json +0 -2
  14. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4/world_reference_mcp.egg-info}/PKG-INFO +3 -3
  15. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/SOURCES.txt +2 -5
  16. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/entry_points.txt +3 -3
  17. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/requires.txt +1 -1
  18. world_reference_mcp-0.3.2/scripts/compute_tool_fingerprints.py +0 -79
  19. world_reference_mcp-0.3.2/tests/test_presets_and_adapters.py +0 -67
  20. world_reference_mcp-0.3.2/tests/test_startup.py +0 -28
  21. world_reference_mcp-0.3.2/world_reference_mcp/connectors/__init__.py +0 -14
  22. world_reference_mcp-0.3.2/world_reference_mcp/connectors/adapters.py +0 -81
  23. world_reference_mcp-0.3.2/world_reference_mcp/connectors/mcp_source_presets.json +0 -312
  24. world_reference_mcp-0.3.2/world_reference_mcp/connectors/tool_schema_fingerprints.json +0 -14
  25. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/LICENSE +0 -0
  26. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/scripts/security_sanitizer.py +0 -0
  27. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/setup.cfg +0 -0
  28. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/conftest.py +0 -0
  29. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_fdc.py +0 -0
  30. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_gbif.py +0 -0
  31. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_inaturalist.py +0 -0
  32. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_ncbi_taxonomy.py +0 -0
  33. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_noaa.py +0 -0
  34. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_ols4.py +0 -0
  35. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_open_meteo.py +0 -0
  36. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_api_wikidata.py +0 -0
  37. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_concept_parity.py +0 -0
  38. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_init_dynamics.py +0 -0
  39. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/tests/test_sdk_rate_limiter.py +0 -0
  40. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/__init__.py +0 -0
  41. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/__main__.py +0 -0
  42. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/__init__.py +0 -0
  43. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/fdc.py +0 -0
  44. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/gbif.py +0 -0
  45. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/inaturalist.py +0 -0
  46. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/ncbi_taxonomy.py +0 -0
  47. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/noaa.py +0 -0
  48. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/ols4.py +0 -0
  49. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/open_meteo.py +0 -0
  50. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/api/wikidata.py +0 -0
  51. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/config.py +0 -0
  52. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/credentials.py +0 -0
  53. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/errors.py +0 -0
  54. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/http_clients.py +0 -0
  55. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/__init__.py +0 -0
  56. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/clients.py +0 -0
  57. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/server.py +0 -0
  58. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_nutrition.py +0 -0
  59. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_observations.py +0 -0
  60. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_taxonomy.py +0 -0
  61. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_terms.py +0 -0
  62. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp/tools_wikidata.py +0 -0
  63. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp_config.json +0 -0
  64. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/mcp_server.py +0 -0
  65. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/__init__.py +0 -0
  66. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/fixtures/records.json +0 -0
  67. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/mappings/source.yaml +0 -0
  68. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/migrations/manifest.json +0 -0
  69. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/ontology/shapes/connector.shacl.ttl +0 -0
  70. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/prompts/__init__.py +0 -0
  71. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/__init__.py +0 -0
  72. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-alignment/SKILL.md +0 -0
  73. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-alignment/WORKFLOW.md +0 -0
  74. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-mcp-operations/SKILL.md +0 -0
  75. {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
  76. {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
  77. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-nutrition/SKILL.md +0 -0
  78. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-nutrition/WORKFLOW.md +0 -0
  79. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-observations/SKILL.md +0 -0
  80. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-observations/WORKFLOW.md +0 -0
  81. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-taxonomy/SKILL.md +0 -0
  82. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-taxonomy/WORKFLOW.md +0 -0
  83. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-terms/SKILL.md +0 -0
  84. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp/skills/world-reference-terms/WORKFLOW.md +0 -0
  85. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/dependency_links.txt +0 -0
  86. {world_reference_mcp-0.3.2 → world_reference_mcp-0.3.4}/world_reference_mcp.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: world-reference-mcp
3
- Version: 0.3.2
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.3.18
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.2*
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
@@ -1,6 +1,6 @@
1
1
  # world-reference-mcp
2
2
 
3
- *Version: 0.3.2*
3
+ *Version: 0.3.4*
4
4
 
5
5
  World-reference data — organism taxonomy, OBO reference terms, food/nutrition
6
6
  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.2"
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.3.18,<1.0.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
- [project.entry-points."agent_connector_sdk.source_connector_providers"]
46
- world-reference-mcp = "world_reference_mcp.connectors"
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="manifest:world-reference-mcp#schema_mappings/taxon_ncbi_small",
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")
@@ -2,4 +2,4 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "0.3.2"
5
+ __version__ = "0.3.4"
@@ -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/mcp_source_presets.json`'s `ontology_class` hint, resolved at
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.""" .
@@ -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)",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: world-reference-mcp
3
- Version: 0.3.2
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.3.18
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.2*
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
@@ -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,4 +1,4 @@
1
- agent-connector-sdk[mcp]<1.0.0,>=0.3.18
1
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.1
2
2
  httpx>=0.28.1
3
3
 
4
4
  [test]
@@ -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())