Skip to main content

lime-mcp-server-sdk

Verify LIME MCP passport JWTs on your resource server — local JWKS, no LIME hop on the hot path.

from lime_mcp_server import TokenVerifier

verifier = TokenVerifier(expected_domain="tools.example.com")

result = verifier.verify(bearer_token)  # Authorization: Bearer <jwt>
if result.is_valid:
    agent_id = result.agent_id  # claims["sub"] — then YOUR ACL

What the SDK handles: JWKS fetch · cache · RS256 · aud=mcp · issuer · domain pin · async verify.

PyPI version Python versions License: MIT CI Documentation MCP compatible

Docs: Read the Docs · lime.pics/docs · Platform


Installation

pip install lime-mcp-server-sdk
# pin the hostname this RS serves:
export LIME_EXPECTED_DOMAIN=tools.example.com

Requirements: Python 3.10+ · PyJWT · cryptography · httpx
Config: expected_domain= or LIME_EXPECTED_DOMAIN. Zero JWKS boilerplate — not zero config.


Quick start (canonical) — verify Bearer

from lime_mcp_server import TokenVerifier

verifier = TokenVerifier(expected_domain="tools.example.com")


def authorize_mcp_request(authorization_header: str | None) -> str | None:
    if not authorization_header:
        return None
    token = authorization_header.removeprefix("Bearer ").strip()
    if not token:
        return None
    result = verifier.verify(token)
    if not result.is_valid:
        return None
    return result.agent_id  # then apply YOUR tool ACL

Copy-paste: examples/verify-middleware/.

Agent side issues the JWT with lime-agents-sdk (list_tools / call_tool). This package only verifies.


Mental model

TokenVerifier
├── verify(token) / verify_async(token)   ← primary
├── warmup()                              ← production startup
└── cache / refresh / invalidate          ← advanced
Artifact Audience Verified here?
MCP JWT (aud=mcp) Your MCP RS Yes
Site passport (aud=lime-site-login) Site backend No — use lime-sites-sdk

Never send X-Agent-Token to the MCP server. Agents send only Authorization: Bearer <passport>.


Production — async + JWKS warmup

from contextlib import asynccontextmanager

from lime_mcp_server import TokenVerifier

verifier = TokenVerifier(expected_domain="tools.example.com")


@asynccontextmanager
async def lifespan(app):
    verifier.warmup(raise_on_failure=True)  # raises on JWKS failure
    yield


async def verify_bearer(authorization: str) -> str | None:
    token = authorization.removeprefix("Bearer ").strip()
    if not token:
        return None
    result = await verifier.verify_async(token)
    if not result.is_valid:
        return None
    return result.agent_id

Example: examples/async-warmup/.


How the flow fits together

Step Who What
1 Agent (lime-agents-sdk) Issues MCP JWT from X-Agent-Token
2 Agent Calls your RS with Authorization: Bearer <jwt>
3 Your server (this SDK) TokenVerifier.verify — RS256 + aud + domain
4 Your server agent_id = sub → your ACL

MCP JWTs are rejected on LIME HTTP APIs. This SDK is for your MCP server only.


API surface (summary)

Method Description
verify(token) Sync RS256 verify → TokenValidationResult
verify_async(token) Non-blocking verify
warmup() Prefetch OAuth metadata + JWKS
.cache / refresh_cache() / invalidate_cache() JWKS cache control

Result: is_valid, agent_id (sub), domain, error, valid_claims.

Env: LIME_EXPECTED_DOMAIN (or kwarg), LIME_BASE_URL (default https://lime.pics), cache/leeway knobs — see RTD.

Full reference: Read the Docs — API.


Package Role
lime-agents-sdk Agent worker: issue MCP JWT + call tools
lime-sites-sdk Site backend: site login / binding passports

Examples

Path Purpose
examples/verify-middleware/ Sync Bearer check
examples/async-warmup/ Warmup + verify_async

Contributing

git clone https://github.com/Mawyxx/lime-mcp-server-sdk.git
cd lime-mcp-server-sdk
pip install -e ".[dev]"
ruff check src tests
mypy src/lime_mcp_server
pytest --cov=lime_mcp_server --cov-fail-under=100

License

MIT — see LICENSE.

Release files for lime-mcp-server-sdk 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lime-mcp-server-sdk 1.0.2
File Size Uploaded
lime_mcp_server_sdk-1.0.2.tar.gz 23.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lime-mcp-server-sdk 1.0.2
File Interpreter ABI Platform
lime_mcp_server_sdk-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 37.5 kB

Release files / lime_mcp_server_sdk-1.0.2.tar.gz

Download URL lime_mcp_server_sdk-1.0.2.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d5973085e582de5442009fcfa474554577d3ef3474709387b079a0c19088f425
BLAKE2b-256 checksum
How to use checksums
6192b5a5ee8850f23d677d344485f78d681931102fb7d50a61d04d8ea50c08a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / lime_mcp_server_sdk-1.0.2-py3-none-any.whl

Download URL lime_mcp_server_sdk-1.0.2-py3-none-any.whl
Size 14.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
07224dd9f1f95667111277d7b68e9c07d1b88de439097e2758b0371c7b065c5f
BLAKE2b-256 checksum
How to use checksums
5cb646be493b2c635532d6dd770b998e50698641061da7c86a0e92b0c0a8f8b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.5.0

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page