Mojentic MCP is a module for the Mojentic framework that provides basic MCP server and client infrastructure for tools and chat agents.
Project description
Mojentic-MCP
Mojentic MCP is a library providing MCP (Machine Conversation Protocol) server and client infrastructure for tools and agentic chat creators. It allows you to easily expose tools to AI assistants that support the MCP protocol.
🚀 Features
- HTTP Transport: Expose the MCP protocol over HTTP using FastAPI
- STDIO Transport: Expose the MCP protocol over standard input/output
- JSON-RPC 2.0 Handler: Handle standard MCP requests and responses
- Tool Integration: Easily expose custom tools to AI assistants
- MCP Protocol Support: Implements the core MCP protocol methods. Currently, the primary focus is on the
toolscapabilities (tools/list,tools/call). Other methods likeresources/listandprompts/listare stubbed to return empty lists for broader MCP compatibility.
🔧 Installation
pip install mojentic-mcp
🚦 Quick Start
HTTP Server Example
Create a simple HTTP MCP server with date-related tools:
import logging
import sys
logging.basicConfig(level=logging.INFO)
from mojentic.llm.tools.current_datetime import CurrentDateTimeTool
from mojentic.llm.tools.date_resolver import ResolveDateTool
from mojentic_mcp.mcp_http import HttpMcpServer
from mojentic_mcp.rpc import JsonRpcHandler
sys.stderr.write("Starting HTTP MCP server...\n")
sys.stderr.write("Server ready to receive commands\n")
rpc_handler = JsonRpcHandler(tools=[ResolveDateTool(), CurrentDateTimeTool()])
# Create an HTTP MCP server with the default path ("/jsonrpc")
server = HttpMcpServer(rpc_handler)
# Or specify a custom path
# server = HttpMcpServer(rpc_handler, path="/custom-path")
server.run()
STDIO Server Example
Create a simple STDIO MCP server with date-related tools:
import logging
import sys
logging.basicConfig(level=logging.CRITICAL)
from mojentic.llm.tools.current_datetime import CurrentDateTimeTool
from mojentic.llm.tools.date_resolver import ResolveDateTool
from mojentic_mcp.mcp_stdio import StdioMcpServer
from mojentic_mcp.rpc import JsonRpcHandler
sys.stderr.write("Starting STDIO MCP server...\n")
sys.stderr.write("Server ready to receive commands on stdin\n")
rpc_handler = JsonRpcHandler(tools=[ResolveDateTool(), CurrentDateTimeTool()])
server = StdioMcpServer(rpc_handler)
server.run()
🛠️ Creating Custom Tools
You can create custom tools by extending the LLMTool class:
from mojentic.llm.tools.llm_tool import LLMTool
from mojentic_mcp.mcp_http import HttpMcpServer
from mojentic_mcp.rpc import JsonRpcHandler
class AboutTheUser(LLMTool):
def run(self):
return {
"name": "Stacey",
"favourite_colour": "purple"
}
@property
def descriptor(self):
return {
"type": "function",
"function": {
"name": "colour_preferences",
"description": "Return the user's favourite colour.",
"parameters": {
"type": "object",
"properties": {},
}
}
}
rpc_handler = JsonRpcHandler(tools=[AboutTheUser()])
server = HttpMcpServer(rpc_handler)
server.run()
📋 Task Management Example
Create a set of related tools that share state:
from mojentic.llm.tools.ephemeral_task_manager import EphemeralTaskList, AppendTaskTool, PrependTaskTool, \
InsertTaskAfterTool, StartTaskTool, CompleteTaskTool, ListTasksTool, ClearTasksTool
from mojentic_mcp.mcp_http import HttpMcpServer
from mojentic_mcp.rpc import JsonRpcHandler
task_list = EphemeralTaskList()
rpc_handler = JsonRpcHandler(tools=[
AppendTaskTool(task_list),
PrependTaskTool(task_list),
InsertTaskAfterTool(task_list),
StartTaskTool(task_list),
CompleteTaskTool(task_list),
ListTasksTool(task_list),
ClearTasksTool(task_list),
])
server = HttpMcpServer(rpc_handler)
server.run()
📚 MCP Protocol Reference
The library implements the following core JSON-RPC methods as specified by the MCP protocol. While methods for resources and prompts are present for MCP compatibility (returning empty lists), the current implementation is focused on delivering robust tools functionality.
| Method | Description |
|---|---|
| initialize | Negotiates protocol version and capabilities |
| tools/list | Lists available tools |
| tools/call | Calls a tool with arguments |
| resources/list | Lists available resources |
| prompts/list | Lists available prompts |
🔌 Client-Side API
The client-side API allows developers to easily interact with MCP servers. It supports multiple transports (HTTP, STDIO) and provides an idiomatic Python interface for tool discovery and invocation.
Initialization
from mojentic_mcp.client import McpClient
from mojentic_mcp.transports import HttpTransport, StdioTransport
# Define one or more transports
# You can initialize HttpTransport with a full URL:
http_transport = HttpTransport(url="http://localhost:8080/jsonrpc")
# Or with host, port, and an optional path (defaults to "/jsonrpc"):
http_transport_alt = HttpTransport(host="localhost", port=8080)
# Or with a custom path:
http_transport_custom = HttpTransport(host="localhost", port=8080, path="/custom-path")
stdio_transport = StdioTransport(command="/usr/local/bin/my_mcp_server_command")
# Initialize the client with a list of transports
client = McpClient(transports=[http_transport, stdio_transport])
Tool Invocation
Tools will be accessible as methods on a tools attribute of the client object:
# List available tools (aggregated from all transports)
tools_list = client.list_tools()
# Invoke a tool (client determines the correct transport)
resolved_date_result = client.tools.resolve_date(date_string="next Monday")
forecast_result = client.tools.get_weather_forecast(location="New York", days=3)
📚 Documentation
Visit the documentation for comprehensive guides, API reference, and examples.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mojentic_mcp-0.7.0.tar.gz.
File metadata
- Download URL: mojentic_mcp-0.7.0.tar.gz
- Upload date:
- Size: 27.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e5a9674fd50412ed521b3b8b0926757f77258b78f3f76097010b25d5751a2ba
|
|
| MD5 |
f85e68bd7ddf937a4ff929073e286046
|
|
| BLAKE2b-256 |
f94db95ee881901340b1166e579e751905a9092be3f305e68efa8c51a36998dc
|
Provenance
The following attestation bundles were made for mojentic_mcp-0.7.0.tar.gz:
Publisher:
python-publish.yml on svetzal/mojentic-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mojentic_mcp-0.7.0.tar.gz -
Subject digest:
4e5a9674fd50412ed521b3b8b0926757f77258b78f3f76097010b25d5751a2ba - Sigstore transparency entry: 219707852
- Sigstore integration time:
-
Permalink:
svetzal/mojentic-mcp@8b0f7ab2a5a316d59ae4a6cf28b8d95284f011a1 -
Branch / Tag:
refs/tags/RELEASE-0.7.0 - Owner: https://github.com/svetzal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@8b0f7ab2a5a316d59ae4a6cf28b8d95284f011a1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mojentic_mcp-0.7.0-py3-none-any.whl.
File metadata
- Download URL: mojentic_mcp-0.7.0-py3-none-any.whl
- Upload date:
- Size: 33.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15037668daac30077844bfb435ad3d0a4d63ffa761553072639e0458660a6226
|
|
| MD5 |
3e947837b067b00a3a74d54ad0817b80
|
|
| BLAKE2b-256 |
6dafc57eea2613da22a778012abdf2f5448b93c89d4b9febedee218678e59258
|
Provenance
The following attestation bundles were made for mojentic_mcp-0.7.0-py3-none-any.whl:
Publisher:
python-publish.yml on svetzal/mojentic-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mojentic_mcp-0.7.0-py3-none-any.whl -
Subject digest:
15037668daac30077844bfb435ad3d0a4d63ffa761553072639e0458660a6226 - Sigstore transparency entry: 219707855
- Sigstore integration time:
-
Permalink:
svetzal/mojentic-mcp@8b0f7ab2a5a316d59ae4a6cf28b8d95284f011a1 -
Branch / Tag:
refs/tags/RELEASE-0.7.0 - Owner: https://github.com/svetzal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@8b0f7ab2a5a316d59ae4a6cf28b8d95284f011a1 -
Trigger Event:
release
-
Statement type: