Skip to main content

Simple, yet solid - Type-safe JSON-RPC 1.0/2.0 with OpenAPI support

Project description

python-jsonrpc-lib

Simple, yet solid. JSON-RPC 1.0/2.0 for Python.

JSON-RPC is a small protocol: a method name, some parameters, a result. python-jsonrpc-lib keeps it that way. You write ordinary Python functions and dataclasses; the library handles validation, routing, error responses, and API documentation. No framework lock-in, no external dependencies, no boilerplate.

Install

pip install python-jsonrpc-lib

Quickstart

Define methods as classes with typed parameters. The library validates inputs, routes calls, and builds responses automatically.

from dataclasses import dataclass
from jsonrpc import JSONRPC, Method, MethodGroup

@dataclass
class AddParams:
    a: int
    b: int

class Add(Method):
    def execute(self, params: AddParams) -> int:
        return params.a + params.b

@dataclass
class GreetParams:
    name: str
    greeting: str = 'Hello'

class Greet(Method):
    def execute(self, params: GreetParams) -> str:
        return f'{params.greeting}, {params.name}!'

rpc = JSONRPC(version='2.0')
rpc.register('add', Add())
rpc.register('greet', Greet())

response = rpc.handle('{"jsonrpc": "2.0", "method": "add", "params": {"a": 5, "b": 3}, "id": 1}')
# '{"jsonrpc": "2.0", "result": 8, "id": 1}'

Pass in a JSON string, get a JSON string back. What carries it over the wire is up to you.

If a is "five" instead of 5, the caller receives a -32602 Invalid params error immediately — no exception handling on your end.

The same AddParams dataclass drives validation, IDE autocomplete, and the OpenAPI schema.

Why python-jsonrpc-lib?

  • Zero dependencies — pure Python 3.11+. Nothing to pin, nothing to audit beyond the library itself.
  • Type validation from dataclasses — declare parameters as a dataclass, get automatic validation and clear error messages for free.
  • OpenAPI docs auto-generated — type hints and docstrings you already wrote become a full OpenAPI 3.0 spec. Point any Swagger-compatible UI at it and your API is self-documented.
  • Transport-agnosticrpc.handle(json_string) returns a string. HTTP, WebSocket, TCP, message queue: your choice.
  • Spec-compliant by default — v1.0 and v2.0 rules enforced out of the box, configurable when you need to support legacy clients.

Namespacing and Middleware

Use MethodGroup to organize methods into namespaces and add cross-cutting concerns:

math = MethodGroup()
math.register('add', Add())

rpc = JSONRPC(version='2.0')
rpc.register('math', math)

# "math.add" is now available

Quick Prototyping

For scripts and throwaway code, the @rpc.method decorator registers functions directly (v2.0 only):

rpc = JSONRPC(version='2.0')

@rpc.method
def add(a: int, b: int) -> int:
    return a + b

For production use, prefer Method classes — they support context, middleware, and groups.

Documentation

Full documentation with tutorials, integration guides, and API reference:

Claude Code Integration

If you use Claude Code, a skill for this library is available. It gives Claude built-in knowledge of jsonrpc-lib's API: creating methods, registering them, organizing with groups, handling errors, and adding context and middleware — without having to look up docs.

To use it, add the skill file to your project's .claude/skills/ directory.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_jsonrpc_lib-0.3.2.tar.gz (97.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_jsonrpc_lib-0.3.2-py3-none-any.whl (28.9 kB view details)

Uploaded Python 3

File details

Details for the file python_jsonrpc_lib-0.3.2.tar.gz.

File metadata

  • Download URL: python_jsonrpc_lib-0.3.2.tar.gz
  • Upload date:
  • Size: 97.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.2","id":"zara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for python_jsonrpc_lib-0.3.2.tar.gz
Algorithm Hash digest
SHA256 a6cc03b76183fe6b34f255e970ca164faaabae4b666045b3352173506ae53523
MD5 acd0b94d1b43b4175a99d199517126ab
BLAKE2b-256 a7ede1293f61b1e8a711fb90ab5cb02a4d67359e0406c54ac00876ccfc09c4d7

See more details on using hashes here.

File details

Details for the file python_jsonrpc_lib-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: python_jsonrpc_lib-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 28.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.2","id":"zara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for python_jsonrpc_lib-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6b96825a865c32a133c1abe1990a04707e1b0b8b2874a42c60062585ba8fe287
MD5 dd804fb269191f9be4189613047e0ecb
BLAKE2b-256 885a98a7d7c52f1a417ddaba1db037b8ee42b1de63668cafff9b91df59166a5d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page