deep-agentic-core-mcp 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,5 @@
1
+ """Core package for the DeepAgentLabs unified MCP server."""
2
+
3
+ __all__ = ["__version__"]
4
+
5
+ __version__ = "0.1.0"
@@ -0,0 +1 @@
1
+ """Integration adapters for sibling DeepAgentLabs projects."""
@@ -0,0 +1,6 @@
1
+ """Adapter boundary for agentic-chaos integration."""
2
+
3
+
4
+ def describe_capabilities() -> list[str]:
5
+ """Return the initial capability placeholders for chaos integration."""
6
+ return ["list_faults", "run_experiment"]
@@ -0,0 +1,6 @@
1
+ """Adapter boundary for agenticlens integration."""
2
+
3
+
4
+ def describe_capabilities() -> list[str]:
5
+ """Return the initial capability placeholders for lens integration."""
6
+ return ["analyze_workflow", "profile_workflow"]
@@ -0,0 +1,5 @@
1
+ """Shared project constants and metadata."""
2
+
3
+ SERVER_NAME = "io.github.deepagentlabs/deep-agentic-core-mcp"
4
+ PACKAGE_NAME = "deep-agentic-core-mcp"
5
+ VERSION = "0.1.0"
@@ -0,0 +1 @@
1
+ """Prompt definitions exposed by the MCP server."""
@@ -0,0 +1,15 @@
1
+ """Reusable prompt catalog placeholders."""
2
+
3
+
4
+ def list_prompts() -> list[dict[str, str]]:
5
+ """Return the initial prompt registry."""
6
+ return [
7
+ {
8
+ "name": "lens.workflow_summary",
9
+ "description": "Summarize an analyzed workflow for a human operator.",
10
+ },
11
+ {
12
+ "name": "chaos.experiment_brief",
13
+ "description": "Explain the intent and expected impact of a chaos run.",
14
+ },
15
+ ]
@@ -0,0 +1 @@
1
+ """Resource catalogs exposed by the MCP server."""
@@ -0,0 +1,17 @@
1
+ """Placeholder resource catalog."""
2
+
3
+
4
+ def list_resources() -> list[dict[str, str]]:
5
+ """Return the initial resource inventory."""
6
+ return [
7
+ {
8
+ "uri": "resource://examples/sample_workflow",
9
+ "name": "Sample workflow artifact",
10
+ "kind": "workflow-json",
11
+ },
12
+ {
13
+ "uri": "resource://catalogs/chaos_faults",
14
+ "name": "Chaos fault catalog",
15
+ "kind": "reference",
16
+ },
17
+ ]
@@ -0,0 +1 @@
1
+ """Typed contracts for MCP-facing operations."""
@@ -0,0 +1,26 @@
1
+ """Core schema definitions for early tool contracts."""
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+
6
+ class ToolDescriptor(BaseModel):
7
+ """Basic metadata describing an MCP tool."""
8
+
9
+ name: str
10
+ title: str
11
+ description: str
12
+
13
+
14
+ class ResourceDescriptor(BaseModel):
15
+ """Basic metadata describing an MCP resource."""
16
+
17
+ uri: str
18
+ name: str
19
+ kind: str = Field(description="Broad classification for the resource payload.")
20
+
21
+
22
+ class PromptDescriptor(BaseModel):
23
+ """Basic metadata describing an MCP prompt."""
24
+
25
+ name: str
26
+ description: str
@@ -0,0 +1,117 @@
1
+ """MCP server entrypoint using the official MCP Python SDK (stdio transport)."""
2
+
3
+ import asyncio
4
+ import json
5
+ from collections.abc import Callable
6
+ from typing import Any
7
+
8
+ from mcp.server import Server
9
+ from mcp.server.stdio import stdio_server
10
+ from mcp.types import Resource, TextContent, Tool
11
+ from pydantic import AnyUrl
12
+
13
+ from deep_agentic_core_mcp.config import SERVER_NAME
14
+ from deep_agentic_core_mcp.resources.catalog import list_resources as _catalog_resources
15
+ from deep_agentic_core_mcp.tools.core import health, version
16
+ from deep_agentic_core_mcp.tools.registry import list_tools as _registry_tools
17
+
18
+ # ---------------------------------------------------------------------------
19
+ # Server instance
20
+ # ---------------------------------------------------------------------------
21
+
22
+ server = Server(SERVER_NAME)
23
+
24
+ # ---------------------------------------------------------------------------
25
+ # Tool dispatch
26
+ # ---------------------------------------------------------------------------
27
+
28
+ _TOOL_DISPATCH: dict[str, Callable[[], dict[str, str]]] = {
29
+ "core.health": health,
30
+ "core.version": version,
31
+ }
32
+
33
+ # ---------------------------------------------------------------------------
34
+ # Tool definitions (derived from the canonical registry)
35
+ # ---------------------------------------------------------------------------
36
+
37
+
38
+ def _build_tools() -> list[Tool]:
39
+ """Build Tool objects from the central tool registry.
40
+
41
+ Only tools with a registered handler are advertised.
42
+ """
43
+ return [
44
+ Tool(
45
+ name=entry["name"],
46
+ description=entry["description"],
47
+ inputSchema={"type": "object", "properties": {}, "additionalProperties": False},
48
+ )
49
+ for entry in _registry_tools()
50
+ if entry["name"] in _TOOL_DISPATCH
51
+ ]
52
+
53
+
54
+ def _build_resources() -> list[Resource]:
55
+ """Build Resource objects from the central resource catalog."""
56
+ return [
57
+ Resource(
58
+ uri=AnyUrl(entry["uri"]),
59
+ name=entry["name"],
60
+ mimeType="application/json",
61
+ )
62
+ for entry in _catalog_resources()
63
+ ]
64
+
65
+
66
+ TOOLS: list[Tool] = _build_tools()
67
+ RESOURCES: list[Resource] = _build_resources()
68
+
69
+ # ---------------------------------------------------------------------------
70
+ # Handlers
71
+ # ---------------------------------------------------------------------------
72
+
73
+
74
+ @server.list_tools() # type: ignore[no-untyped-call, untyped-decorator]
75
+ async def handle_list_tools() -> list[Tool]:
76
+ """Advertise available tools."""
77
+ return TOOLS
78
+
79
+
80
+ @server.call_tool() # type: ignore[untyped-decorator]
81
+ async def handle_call_tool(name: str, arguments: dict[str, Any] | None) -> list[TextContent]:
82
+ """Dispatch tool calls and return JSON results."""
83
+ handler = _TOOL_DISPATCH.get(name)
84
+ if handler is None:
85
+ return [TextContent(type="text", text=json.dumps({"error": f"Unknown tool: {name}"}))]
86
+ result = handler()
87
+ return [TextContent(type="text", text=json.dumps(result))]
88
+
89
+
90
+ @server.list_resources() # type: ignore[no-untyped-call, untyped-decorator]
91
+ async def handle_list_resources() -> list[Resource]:
92
+ """Advertise available resources."""
93
+ return RESOURCES
94
+
95
+
96
+ # ---------------------------------------------------------------------------
97
+ # Entrypoint
98
+ # ---------------------------------------------------------------------------
99
+
100
+
101
+ async def run_server() -> None:
102
+ """Start the MCP server over stdio."""
103
+ async with stdio_server() as (read_stream, write_stream):
104
+ await server.run(
105
+ read_stream,
106
+ write_stream,
107
+ server.create_initialization_options(),
108
+ )
109
+
110
+
111
+ def main() -> None:
112
+ """Synchronous entrypoint for console_scripts."""
113
+ asyncio.run(run_server())
114
+
115
+
116
+ if __name__ == "__main__":
117
+ main()
@@ -0,0 +1 @@
1
+ """Shared orchestration services."""
@@ -0,0 +1,25 @@
1
+ """Service helpers for server-side registries."""
2
+
3
+ from deep_agentic_core_mcp.prompts.registry import list_prompts
4
+ from deep_agentic_core_mcp.resources.catalog import list_resources
5
+ from deep_agentic_core_mcp.schemas.tooling import (
6
+ PromptDescriptor,
7
+ ResourceDescriptor,
8
+ ToolDescriptor,
9
+ )
10
+ from deep_agentic_core_mcp.tools.registry import list_tools
11
+
12
+
13
+ def tool_descriptors() -> list[ToolDescriptor]:
14
+ """Return typed tool metadata."""
15
+ return [ToolDescriptor(**tool) for tool in list_tools()]
16
+
17
+
18
+ def resource_descriptors() -> list[ResourceDescriptor]:
19
+ """Return typed resource metadata."""
20
+ return [ResourceDescriptor(**resource) for resource in list_resources()]
21
+
22
+
23
+ def prompt_descriptors() -> list[PromptDescriptor]:
24
+ """Return typed prompt metadata."""
25
+ return [PromptDescriptor(**prompt) for prompt in list_prompts()]
@@ -0,0 +1 @@
1
+ """Tool group modules for the MCP server."""
@@ -0,0 +1,8 @@
1
+ """Chaos tool placeholders."""
2
+
3
+ from deep_agentic_core_mcp.adapters.agentic_chaos import describe_capabilities
4
+
5
+
6
+ def capabilities() -> dict[str, list[str]]:
7
+ """Return placeholder chaos capabilities."""
8
+ return {"chaos": describe_capabilities()}
@@ -0,0 +1,13 @@
1
+ """Core server tool stubs."""
2
+
3
+ from deep_agentic_core_mcp.config import SERVER_NAME, VERSION
4
+
5
+
6
+ def health() -> dict[str, str]:
7
+ """Return a basic health payload."""
8
+ return {"status": "ok", "server": SERVER_NAME}
9
+
10
+
11
+ def version() -> dict[str, str]:
12
+ """Return the current package version."""
13
+ return {"version": VERSION}
@@ -0,0 +1,8 @@
1
+ """Lens tool placeholders."""
2
+
3
+ from deep_agentic_core_mcp.adapters.agenticlens import describe_capabilities
4
+
5
+
6
+ def capabilities() -> dict[str, list[str]]:
7
+ """Return placeholder lens capabilities."""
8
+ return {"lens": describe_capabilities()}
@@ -0,0 +1,27 @@
1
+ """Central tool metadata registry."""
2
+
3
+
4
+ def list_tools() -> list[dict[str, str]]:
5
+ """Return the initial tool inventory for the server."""
6
+ return [
7
+ {
8
+ "name": "core.health",
9
+ "title": "Health Check",
10
+ "description": "Return the basic health status of the MCP server.",
11
+ },
12
+ {
13
+ "name": "core.version",
14
+ "title": "Server Version",
15
+ "description": "Return the current server package version.",
16
+ },
17
+ {
18
+ "name": "lens.analyze_workflow",
19
+ "title": "Analyze Workflow",
20
+ "description": "Analyze an AgenticLens-compatible workflow artifact.",
21
+ },
22
+ {
23
+ "name": "chaos.list_faults",
24
+ "title": "List Chaos Faults",
25
+ "description": "List the supported fault types for chaos experiments.",
26
+ },
27
+ ]
@@ -0,0 +1,192 @@
1
+ Metadata-Version: 2.4
2
+ Name: deep-agentic-core-mcp
3
+ Version: 0.1.0
4
+ Summary: Unified MCP server for AgenticLens and Agentic Chaos workflows.
5
+ Project-URL: Homepage, https://github.com/DeepAgentLabs/deep-agentic-core-mcp
6
+ Project-URL: Repository, https://github.com/DeepAgentLabs/deep-agentic-core-mcp
7
+ Project-URL: Issues, https://github.com/DeepAgentLabs/deep-agentic-core-mcp/issues
8
+ Author: DeepAgentLabs
9
+ License: MIT
10
+ Keywords: agentic-ai,chaos-engineering,llm,mcp,observability
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Requires-Python: >=3.10
20
+ Requires-Dist: mcp>=1.10.0
21
+ Requires-Dist: pydantic<3,>=2.0
22
+ Provides-Extra: dev
23
+ Requires-Dist: build>=1.2; extra == 'dev'
24
+ Requires-Dist: mypy>=1.10; extra == 'dev'
25
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
26
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
27
+ Requires-Dist: pytest>=8.0; extra == 'dev'
28
+ Requires-Dist: ruff>=0.6; extra == 'dev'
29
+ Requires-Dist: twine>=5.1; extra == 'dev'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # deep-agentic-core-mcp
33
+
34
+ `deep-agentic-core-mcp` is the shared MCP server layer for the DeepAgentLabs
35
+ ecosystem. It is designed to expose a single MCP interface that combines:
36
+
37
+ - `agenticlens` style workflow inspection, profiling, and analysis
38
+ - `agentic-chaos` style resilience testing and fault-injection workflows
39
+
40
+ The goal is one MCP server, one package, and one registry identity rather than
41
+ separate MCP servers for each product surface.
42
+
43
+ <!-- mcp-name: io.github.deepagentlabs/deep-agentic-core-mcp -->
44
+
45
+ ## Idea
46
+
47
+ This project is the control plane between LLM hosts and the existing Python
48
+ libraries:
49
+
50
+ - `agenticlens` remains the core profiling and analysis engine
51
+ - `agentic-chaos` remains the core chaos and resilience engine
52
+ - `deep-agentic-core-mcp` becomes the MCP-native interface that hosts can call
53
+
54
+ That means MCP clients can connect once and access both observability and chaos
55
+ testing capabilities through one server.
56
+
57
+ ## What This Server Should Eventually Do
58
+
59
+ Planned capability areas:
60
+
61
+ - profile an agentic workflow and return structured telemetry summaries
62
+ - analyze workflow artifacts and surface optimization recommendations
63
+ - run controlled chaos experiments against target workflows
64
+ - compare normal versus chaos runs
65
+ - expose shared resources such as workflow schemas, run metadata, and saved
66
+ reports
67
+
68
+ ## Design Principles
69
+
70
+ - One MCP identity: publish a single server to the MCP Registry
71
+ - Python-first: package and publish through PyPI
72
+ - Thin orchestration layer: reuse `agenticlens` and `agentic-chaos` instead of
73
+ re-implementing their logic
74
+ - Local-first: work well as a stdio MCP server for developer workflows
75
+ - Expandable: leave room for a later remote deployment mode if needed
76
+
77
+ ## Initial Scope
78
+
79
+ The first milestone is foundation only:
80
+
81
+ - repository structure
82
+ - packaging metadata
83
+ - MCP registry metadata
84
+ - roadmap and product framing
85
+ - minimal server entrypoint and tool layout
86
+
87
+ The first working implementation can stay intentionally small while the shape of
88
+ the tool surface stabilizes.
89
+
90
+ ## Proposed MCP Surface
91
+
92
+ Possible first tool groups:
93
+
94
+ - `lens.profile_workflow`
95
+ - `lens.analyze_workflow`
96
+ - `chaos.run_experiment`
97
+ - `chaos.list_faults`
98
+ - `core.health`
99
+ - `core.version`
100
+
101
+ These names are placeholders, but the structure matters: one server can expose
102
+ multiple tools without needing multiple MCP packages or registry entries.
103
+
104
+ ## Repository Layout
105
+
106
+ ```text
107
+ mcp-server/
108
+ ├── README.md
109
+ ├── ROADMAP.md
110
+ ├── pyproject.toml
111
+ ├── server.json
112
+ ├── .gitignore
113
+ ├── docs/
114
+ │ └── architecture.md
115
+ ├── examples/
116
+ │ └── sample_workflow.json
117
+ ├── src/
118
+ │ └── deep_agentic_core_mcp/
119
+ │ ├── __init__.py
120
+ │ ├── server.py
121
+ │ ├── config.py
122
+ │ ├── prompts/
123
+ │ │ ├── __init__.py
124
+ │ │ └── registry.py
125
+ │ ├── resources/
126
+ │ │ ├── __init__.py
127
+ │ │ └── catalog.py
128
+ │ ├── schemas/
129
+ │ │ ├── __init__.py
130
+ │ │ └── tooling.py
131
+ │ ├── services/
132
+ │ │ ├── __init__.py
133
+ │ │ └── registry.py
134
+ │ ├── adapters/
135
+ │ │ ├── __init__.py
136
+ │ │ ├── agentic_chaos.py
137
+ │ │ └── agenticlens.py
138
+ │ └── tools/
139
+ │ ├── __init__.py
140
+ │ ├── registry.py
141
+ │ ├── chaos.py
142
+ │ ├── core.py
143
+ │ └── lens.py
144
+ └── tests/
145
+ ├── test_imports.py
146
+ └── test_registry.py
147
+ ```
148
+
149
+ ## MCP-Oriented Structure
150
+
151
+ This repository should have all of the standard layers we expect for a useful
152
+ MCP server:
153
+
154
+ - `tools/` for callable MCP tools and their registration metadata
155
+ - `resources/` for readable assets such as fault catalogs, templates, and
156
+ workflow examples
157
+ - `prompts/` for reusable prompt templates exposed through the server
158
+ - `schemas/` for typed request and response contracts
159
+ - `services/` for shared orchestration logic that keeps tool modules thin
160
+ - `adapters/` for integration boundaries to `agenticlens` and
161
+ `agentic-chaos`
162
+
163
+ The implementation is still early, but the file structure now reflects that
164
+ shape so we can add functionality without reshuffling the repo later.
165
+
166
+ ## Packaging and Publishing Model
167
+
168
+ `deep-agentic-core-mcp` should publish in two layers:
169
+
170
+ 1. Publish the Python package to PyPI.
171
+ 2. Publish the MCP metadata in `server.json` to the official MCP Registry.
172
+
173
+ For PyPI-based verification, the `mcp-name` marker above must match the
174
+ `name` field in `server.json`.
175
+
176
+ ## Near-Term Build Order
177
+
178
+ 1. Lock the canonical namespace and package metadata.
179
+ 2. Implement the stdio MCP server entrypoint.
180
+ 3. Add a minimal `core.health` tool.
181
+ 4. Add the first `agenticlens` and `agentic-chaos` adapter-backed tools.
182
+ 5. Add examples and publishable packaging checks.
183
+
184
+ ## Notes
185
+
186
+ This scaffold assumes the intended GitHub namespace is
187
+ `io.github.deepagentlabs/deep-agentic-core-mcp`. If the final publishing
188
+ account or org changes, update:
189
+
190
+ - the `mcp-name` marker in this README
191
+ - `server.json`
192
+ - any repository URLs in `pyproject.toml`
@@ -0,0 +1,23 @@
1
+ deep_agentic_core_mcp/__init__.py,sha256=kpcXXYGgzMI7gdqTMPnkacPOLTCXpRmtvXrk-jPOWec,111
2
+ deep_agentic_core_mcp/config.py,sha256=mlEntkCQG3KJIeCs4OQ7hzurzvBRRli3W5STMkOzpGE,165
3
+ deep_agentic_core_mcp/server.py,sha256=T827I8c-h8BTeCxlvy514mZK4W6ytN_Tb7sBeHY7aRo,3747
4
+ deep_agentic_core_mcp/adapters/__init__.py,sha256=pzJVEpJRY97cc9A8ZqHKLyweZmWiUyjGYYQ_Od6nl1E,63
5
+ deep_agentic_core_mcp/adapters/agentic_chaos.py,sha256=-QYRVqOmZeph5QPc1HkQauQajzllNO-LENk63FV2Ilc,219
6
+ deep_agentic_core_mcp/adapters/agenticlens.py,sha256=ZlHtCQ8ErcWK1PuCCGvBrP53CPMbLui36WJErBorPKU,223
7
+ deep_agentic_core_mcp/prompts/__init__.py,sha256=CaHxzwxGngf66dR0p94O-uDQm6B4cDj9EPzvH1qFnY8,52
8
+ deep_agentic_core_mcp/prompts/registry.py,sha256=78ivvsakwmMIS7Gkc5AxdVNZyuQgA8kjBDwXMgw96Lk,456
9
+ deep_agentic_core_mcp/resources/__init__.py,sha256=r6oCIhjB9q0Ugpe08hibVdZxpTkn_cvciiOZ-ONsFk0,51
10
+ deep_agentic_core_mcp/resources/catalog.py,sha256=r7qDmjqtgzhcQ8OusE0NxUc059kvsSh0BBhL1c1VLdM,468
11
+ deep_agentic_core_mcp/schemas/__init__.py,sha256=ZWc0vXRW6Hqlw73FszpPHIWSiimD66-rHoaktwB5Wug,49
12
+ deep_agentic_core_mcp/schemas/tooling.py,sha256=iwYR4R1ciFki3Ecak12_64Y2Nmij2STbbXHhbQfQt38,558
13
+ deep_agentic_core_mcp/services/__init__.py,sha256=41sjpZbjFsPkVOnEk3ZQBR_e_4f_-pKkW2RRwvVQmLw,37
14
+ deep_agentic_core_mcp/services/registry.py,sha256=Fi6QeQCwkMv_RJM74xjSWVenTbkaoU7FLg_T_lnNDSo,851
15
+ deep_agentic_core_mcp/tools/__init__.py,sha256=VVDIHYoMGjtZZRtj2DwRb8uEzbkD-q0G9e6Fn-FUgyk,45
16
+ deep_agentic_core_mcp/tools/chaos.py,sha256=P_uQGt2TaFqQHg_d3h6M5hxVKRfj1750a1IE3MwzyAM,252
17
+ deep_agentic_core_mcp/tools/core.py,sha256=HLivqsL0fUAFCwWw-1-yRo4e2bulD71NooQm19py3rE,332
18
+ deep_agentic_core_mcp/tools/lens.py,sha256=8McsDiijYUNFL2E64vKGJifRwxxS4TAu-EyhDjuUudc,247
19
+ deep_agentic_core_mcp/tools/registry.py,sha256=dzOy-8Tqb2I3LygqkXjTHGCKw_hLbqov1UbLDct9KCc,881
20
+ deep_agentic_core_mcp-0.1.0.dist-info/METADATA,sha256=FdTxkwsfvyPSvGXQbd8L3rHhGO66pA76pfbOoAFxbik,6532
21
+ deep_agentic_core_mcp-0.1.0.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
22
+ deep_agentic_core_mcp-0.1.0.dist-info/entry_points.txt,sha256=YrVOMH2IHqFlrD2m798XfJoOdqNDWRh_xYa8beuaC_Y,76
23
+ deep_agentic_core_mcp-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.31.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ deep-agentic-core-mcp = deep_agentic_core_mcp.server:main