Skip to main content

matimo-postgres

PostgreSQL tools for Matimo - execute SQL queries safely with policy-gated approval.

PyPI Docs


Installation

pip install matimo matimo-postgres

Available Tools (1 Tool)

Tool Description
postgres-execute-sql Execute a SQL query against a PostgreSQL database

The tool does not set requires_approval itself - if you want destructive operations (INSERT, UPDATE, DELETE, DROP) to require human approval, gate them yourself via a policy file or a custom PolicyEngine.


Quick Start

import asyncio
from matimo import Matimo
from matimo_postgres import get_tools_path

async def main():
    matimo = await Matimo.init(get_tools_path())

    # Run a SELECT query
    result = await matimo.execute('postgres-execute-sql', {
        'sql': 'SELECT id, name FROM users LIMIT 10',
    })
    print(result)

asyncio.run(main())

A query whose sql contains a destructive keyword (DELETE, DROP, UPDATE, INSERT, ALTER, CREATE, ...) needs approval. Provide an on_approval callback; without one the query is refused:

from matimo import ApprovalRequest


async def ask_user(request: ApprovalRequest) -> bool:
    print(f"\nSQL requires approval:\n{request.params.get('sql')}")
    return input("Run this query? [y/n]: ").strip() == "y"


matimo = await Matimo.init(get_tools_path(), on_approval=ask_user)

# Prompts before executing
await matimo.execute('postgres-execute-sql', {
    'sql': 'DELETE FROM sessions WHERE expired_at < NOW()',
})

The keyword match is a substring of the upper-cased query, so a SELECT created_at ... also asks (it contains CREATE).


Authentication

export MATIMO_POSTGRES_URL="postgresql://user:password@localhost:5432/mydb"
# or individual params
export MATIMO_POSTGRES_HOST="localhost"
export MATIMO_POSTGRES_PORT="5432"
export MATIMO_POSTGRES_DB="mydb"
export MATIMO_POSTGRES_USER="myuser"
export MATIMO_POSTGRES_PASSWORD="mypassword"

Encrypted connections (TLS)

export MATIMO_POSTGRES_SSL="verify-full"   # disable (default), require, verify-ca or verify-full

require encrypts but does not verify the server certificate. Use verify-ca or verify-full for any database that is not on the same host. An unknown value is rejected.


Security Notes

  • All SQL queries go through Matimo's content validator - SSRF and injection patterns are detected
  • The tool's YAML does not set requires_approval, but the approval handler asks before SQL that writes, changes the schema, or reaches files, the OS or other servers (COPY, pg_read_file, lo_export, dblink, DO, CALL, ...). Without an on_approval callback those queries are refused
  • Use a read-only database user for agent workloads when possible
  • Consider a policy file to restrict allowed SQL patterns

Documentation


Metadata

Release files for matimo-postgres 0.4.0

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

Source distribution (sdist)

Source distribution for matimo-postgres 0.4.0
File Size Uploaded Provenance Actions
matimo_postgres-0.4.0.tar.gz 9.1 kB Without provenance Details for matimo_postgres-0.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for matimo-postgres 0.4.0
File Interpreter ABI Platform Actions
matimo_postgres-0.4.0-py3-none-any.whl Python 3 none any Details for matimo_postgres-0.4.0-py3-none-any.whl

Total release size: 19.3 kB

Release files / matimo_postgres-0.4.0.tar.gz

Download URL matimo_postgres-0.4.0.tar.gz
Size 9.1 kB
Tags Source
SHA-256 checksum
How to use checksums
dfab890edbd5d1b171507ed6767d20d45d71de794870ae6ba394c850b4ffa87a
BLAKE2b-256 checksum
How to use checksums
152cd504662cda06e3f8edbde1b0cba2211693d38567009060f01ce50da2bf05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / matimo_postgres-0.4.0-py3-none-any.whl

Download URL matimo_postgres-0.4.0-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da781e8c57fb0fb2728fcc9a2122172ea84521ac656984c394ed5bc4630f22fd
BLAKE2b-256 checksum
How to use checksums
3f71072d9fc5b929ce10b5ac29786596819056ae03f0fe4b6a6bdae2a3d6e1bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for matimo-postgres 0.4.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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