This release is a pre-release and may not be stable for production use.
gopher-security-mcp Python SDK
Python SDK for gopher-security-mcp, providing AI agent orchestration with native C++ performance through ctypes FFI bindings.
Features
- Python 3.8+ compatibility
- pip/setuptools build system
- ctypes FFI bindings to native library
- GopherAgent class with builder pattern configuration
- Context manager support for automatic resource cleanup
- Typed errors (AgentError, ApiKeyError, ConnectionError, TimeoutError)
- Comprehensive test suite with pytest
Requirements
- Python 3.8 or higher
- Native gopher-security-mcp library (built from source)
Installation
From Source
- Clone the repository:
git clone https://github.com/GopherSecurity/gopher-mcp-python.git
cd gopher-mcp-python
- Build the native library:
./build.sh
- Install the Python package:
pip install -e .
Quick Start
Using API Key
from gopher_security_mcp import GopherAgent, GopherAgentConfig
# Create configuration with API key
config = (GopherAgentConfig.builder()
.provider("AnthropicProvider")
.model("claude-3-haiku-20240307")
.api_key("your-api-key")
.build())
# Create and use agent with context manager
with GopherAgent.create(config) as agent:
response = agent.run("What time is it in Tokyo?")
print(response)
Using JSON Server Configuration
from gopher_security_mcp import GopherAgent, GopherAgentConfig
# Create configuration with server config
config = (GopherAgentConfig.builder()
.provider("AnthropicProvider")
.model("claude-3-haiku-20240307")
.server_config('{"mcpServers": [...]}')
.build())
# Create agent
agent = GopherAgent.create(config)
try:
response = agent.run("What is the weather?")
print(response)
finally:
agent.dispose()
Using Convenience Methods
from gopher_security_mcp import GopherAgent
# Create with API key (shorthand)
agent = GopherAgent.create_with_api_key(
provider="AnthropicProvider",
model="claude-3-haiku-20240307",
api_key="your-api-key"
)
# Or with server config
agent = GopherAgent.create_with_server_config(
provider="AnthropicProvider",
model="claude-3-haiku-20240307",
server_config='{"mcpServers": [...]}'
)
Getting Detailed Results
from gopher_security_mcp import GopherAgent
with GopherAgent.create(config) as agent:
result = agent.run_detailed("What time is it?")
if result.is_success():
print(f"Response: {result.response}")
print(f"Iterations: {result.iteration_count}")
print(f"Tokens used: {result.tokens_used}")
elif result.is_timeout():
print(f"Request timed out: {result.error_message}")
else:
print(f"Error: {result.error_message}")
API Reference
GopherAgent
Main class for interacting with the gopher-security-mcp native library.
Static Methods
GopherAgent.init()- Initialize the library (called automatically)GopherAgent.shutdown()- Shutdown the libraryGopherAgent.is_initialized()- Check if library is initializedGopherAgent.create(config)- Create an agent with configurationGopherAgent.create_with_api_key(provider, model, api_key)- Convenience methodGopherAgent.create_with_server_config(provider, model, server_config)- Convenience method
Instance Methods
agent.run(query, timeout_ms=60000)- Run a query and get response stringagent.run_detailed(query, timeout_ms=60000)- Run a query and get AgentResultagent.dispose()- Release resourcesagent.is_disposed()- Check if agent is disposed
GopherAgentConfig
Configuration class with builder pattern.
config = (GopherAgentConfig.builder()
.provider("AnthropicProvider") # Required
.model("claude-3-haiku-20240307") # Required
.api_key("key") # Either api_key or server_config required
.server_config("{...}") # Either api_key or server_config required
.build())
AgentResult
Result class with status and metadata.
result.response- Response textresult.status- AgentResultStatus enumresult.iteration_count- Number of iterationsresult.tokens_used- Tokens consumedresult.error_message- Error message (if applicable)result.is_success()- Check if successfulresult.is_error()- Check if errorresult.is_timeout()- Check if timeout
Exceptions
AgentError- Base exception for agent errorsApiKeyError- Invalid API keyConnectionError- Connection failedTimeoutError- Operation timed out
Development
Running Tests
pytest
Code Formatting
This project uses Black for code formatting and Ruff for linting.
Format code:
black .
Check formatting without modifying:
black --check .
Run linter:
ruff check .
Fix linting issues:
ruff check --fix .
Building the Native Library
./build.sh
Clean Build
./build.sh --clean
Environment Variables
GOPHER_SECURITY_MCP_LIBRARY_PATH- Custom path to native libraryDEBUG- Enable debug output for library loading
License
See LICENSE file for details.
Metadata
Release files for gopher-security-mcp 0.1.0.dev20260227124047
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| gopher_security_mcp-0.1.0.dev20260227124047.tar.gz | 19.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gopher_security_mcp-0.1.0.dev20260227124047-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.4 kB
Release files / gopher_security_mcp-0.1.0.dev20260227124047.tar.gz
| Download URL | gopher_security_mcp-0.1.0.dev20260227124047.tar.gz |
|---|---|
| Size | 19.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0e42f5ba60fa672ec26ac2c2a7f29a95dc48aa5ff996f8135f8d1b94784d1bb
|
|
BLAKE2b-256 checksum How to use checksums |
d1f093d8021ba76cf2aacad3e947fcd1877074da34cdf847add768cb66d7d609
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Release files / gopher_security_mcp-0.1.0.dev20260227124047-py3-none-any.whl
| Download URL | gopher_security_mcp-0.1.0.dev20260227124047-py3-none-any.whl |
|---|---|
| Size | 17.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
91cf5b2d0ff5f6d652f257e82206b95326f6ebf007dc67ddb323da253e10cd14
|
|
BLAKE2b-256 checksum How to use checksums |
ab9710d24a364d518d5db2dbaad1c132668e14de2b55f2fbc031daa081917c11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Security for gopher-security-mcp 0.1.0.dev20260227124047
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.