Automatation for the Model Context Protocol (MCP).
Project description
Jotsu MCP
General-purpose library for implementing the Model Context Protocol (MCP) and creating workflows that use MCP tools, resources and prompts.
Quickstart
Install the package, including the CLI.
pip install jotsu-mcp[cli]
Create an empty workflow.
jotsu-mcp workflow init
The initialization command creates a workflow file 'workflow.json' in the current directory.
Run it:
jotsu-mcp workflow run ./workflow.json
The output consists of three messages: the workflow start, the single node’s message, and the workflow end.
The final result appears in the result field of the workflow-end node, which in this example is an empty object.
Hello MCP
The workflow can call a tool from an MCP server. This allows you to use MCP with models that don't yet support it (really any model other than Claude).
Add the following server entry:
{
"id": "hello",
"name": "Hello World",
"url": "https://hello.mcp.jotsu.com/mcp/"
}
NOTE: don't forget the path /mcp/ on the URL.
This server is a publicly available MCP server (with no authentication) that has a couple of resources and a tool. (The code is available here).
Next add a node for a server tool.
[
{"id": "greet", "type": "tool", "name": "greet", "server_id": "hello"}
]
Add some initial data that the 'greet' tool needs:
{"name": "World"}
By default, the workflow starts with the first node, but you can also explicitly set the start node:
"start_node_id": "greet"
Finally, add a 'generic' node at the end.
Generic nodes are application-specific - meaning the workflow only handles them by yielding the data -
and are generally used for output and/or debugging.
The type can be any string not already used by the workflow. In this case, 'output'.
Full Workflow
{
"id": "quickstart",
"name": "quickstart",
"description": "Simple workflow to interact with the 'hello' MCP server",
"nodes": [
{"id": "greet", "type": "tool", "name": "greet", "server_id": "hello", "edges": ["output"]},
{"id": "output", "type": "output", "name": "The result"}
],
"servers": [
{
"id": "hello",
"name": "Hello World",
"url": "https://hello.mcp.jotsu.com/mcp/"
}
],
"data": {"name": "World"},
"metadata": null
}
Running this workflow again generates a lot more data, but specifically there is a line similar to:
{
"action": "default",
"timestamp": 132462.392532502,
"id": "01k3h80zcaz050eg7080r3fnv7",
"run_id": "01k3h80t6psmg0s5swsg4yke95",
"node": {
"id": "output",
"name": "The result",
"type": "output"
},
"data": {
"name": "World",
"greet": "Hello, World!"
}
}
The data from this node acts as the 'result' of the workflow. Since workflows can have many branches there is one 'result', instead there could be many such lines depending upon the actions the workflow took.
Development
uv venv
uv pip install '.[dev,cli,anthropic,openai,cloudflare,cryptography]'
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 jotsu_mcp-0.20.0.tar.gz.
File metadata
- Download URL: jotsu_mcp-0.20.0.tar.gz
- Upload date:
- Size: 41.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a52af9dc7c104ed13f8968ec2a0d8c22b93ffdd57bca4b8b554620f115f3e63e
|
|
| MD5 |
38e75db1375626203558d0586fde395b
|
|
| BLAKE2b-256 |
80f6f156bf84fa4d53cc97da0654ad813d0839dbc0d61f1148bdba3ad34a802f
|
File details
Details for the file jotsu_mcp-0.20.0-py3-none-any.whl.
File metadata
- Download URL: jotsu_mcp-0.20.0-py3-none-any.whl
- Upload date:
- Size: 55.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff11e4bcde76dba1454a8edd472ae9434034b2c75889adb72e2c47af1e601837
|
|
| MD5 |
d5842f82db237df09e9402cc4397f416
|
|
| BLAKE2b-256 |
3fa712a9c974825ec0297d9490c3bcf4a3e2da579a6449f75bb996f0a8b7edf4
|