Skip to main content
Glama

KOI-MCP Integration

by BlockScience
README.md9.16 kB
# KOI-MCP Integration [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3120/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.115.12-009688.svg)](https://fastapi.tiangolo.com/) [![KOI-Net](https://img.shields.io/badge/KOI--Net-1.0.0b12-orange.svg)](https://github.com/block-science/koi-net) A bridging framework that integrates the Knowledge Organization Infrastructure (KOI) with the Model Context Protocol (MCP), enabling autonomous agents to exchange rich personality traits and expose capabilities as standardized tools. ## Quick Start ### Prerequisites - Python 3.12+ - [rid-lib](https://github.com/block-science/rid-lib) (≥3.2.5) - [koi-net](https://github.com/block-science/koi-net) (≥1.0.0b12) ### Installation ```bash # Clone the repository git clone https://github.com/block-science/koi-mcp.git cd koi-mcp # Create and activate virtual environment uv venv --python 3.12 source .venv/bin/activate # On Windows: .venv\Scripts\activate # Install the package with development dependencies uv pip install -e ".[dev]" ``` ### Running the Demo The quickest way to see KOI-MCP in action is to run the demo: ```bash python scripts/demo.py ``` This provides a rich interactive console with detailed event logging and component status displays. Alternatively, you can run a simplified demo using the main module: ```bash # Run demo (starts coordinator and two example agents) python -m koi_mcp.main demo ``` This starts a coordinator node and two agent nodes with different personality traits. You can then visit: - Coordinator Registry: [http://localhost:9000/resources/list](http://localhost:9000/resources/list) - Helpful Agent Tools: [http://localhost:8101/tools/list](http://localhost:8101/tools/list) - Creative Agent Tools: [http://localhost:8102/tools/list](http://localhost:8102/tools/list) ### Running Components Individually You can also run the components separately: ```bash # Run coordinator node python -m koi_mcp.main coordinator # Run agent nodes python -m koi_mcp.main agent --config configs/agent1.json python -m koi_mcp.main agent --config configs/agent2.json ``` ## Architecture The KOI-MCP integration follows a **Coordinator-Adapter pattern**: ```mermaid flowchart TD subgraph "Coordinator-Adapter Node" CN[KOI Coordinator Node] AD[MCP Adapter] MC[MCP Context Registry] end subgraph "Agent Node A" A1[KOI Agent Node] A2[Personality Bundle] A3[MCP Server] end subgraph "Agent Node B" B1[KOI Agent Node] B2[Personality Bundle] B3[MCP Server] end CN <-->|Node Discovery| A1 CN <-->|Node Discovery| B1 A1 -->|Personality Broadcast| CN B1 -->|Personality Broadcast| CN CN --> AD AD --> MC MC -->|Agent Registry| C[LLM Clients] A3 -->|Tools/Resources| C B3 -->|Tools/Resources| C ``` 1. **KOI Coordinator Node**: Acts as a central hub for the KOI network, handling agent discovery and state synchronization 2. **MCP Adapter**: Converts KOI personality bundles into MCP-compatible resources and tools 3. **Agent Nodes**: Individual agents with personalities that broadcast their traits to the network 4. **MCP Registry Server**: Exposes the adapter's registry as MCP-compatible endpoints 5. **MCP Agent Servers**: Individual servers for each agent that expose their specific traits as endpoints ## Agent Personality Model Agents express their capabilities through a trait-based personality model: ```python # Example agent configuration { "agent": { "name": "helpful-agent", "version": "1.0", "traits": { "mood": "helpful", "style": "concise", "interests": ["ai", "knowledge-graphs"], "calculate": { "description": "Performs simple calculations", "is_callable": true } } } } ``` Each trait can be: - A simple value (string, number, boolean, list) - A complex object with metadata (description, type, is_callable) - A callable tool that can be invoked by LLM clients ## Implementation Details ### Agent Personality RID The system extends KOI's Resource Identifier (RID) system with a dedicated `AgentPersonality` type: ```python class AgentPersonality(ORN): namespace = "agent.personality" def __init__(self, name, version): self.name = name self.version = version @property def reference(self): return f"{self.name}/{self.version}" ``` ### Personality Profile Schema Agent personalities are structured using Pydantic models: ```python class PersonalityProfile(BaseModel): rid: AgentPersonality node_rid: KoiNetNode base_url: Optional[str] = None mcp_url: Optional[str] = None traits: List[PersonalityTrait] = Field(default_factory=list) ``` ### Knowledge Processing Pipeline The system integrates with KOI's knowledge processing pipeline through specialized handlers: ```python @processor.register_handler(HandlerType.Bundle, rid_types=[AgentPersonality]) def personality_bundle_handler(proc: ProcessorInterface, kobj: KnowledgeObject): """Process agent personality bundles.""" try: # Validate contents as PersonalityProfile profile = PersonalityProfile.model_validate(kobj.contents) # Register with MCP adapter if available if mcp_adapter is not None: mcp_adapter.register_agent(profile) return kobj except ValidationError: return STOP_CHAIN ``` ## MCP Endpoint Integration The integration provides MCP-compatible REST endpoints: ### Coordinator Registry Endpoints - `GET /resources/list`: List all known agent resources - `GET /resources/read/{resource_id}`: Get details for a specific agent - `GET /tools/list`: List all available agent tools ### Agent Server Endpoints - `GET /resources/list`: List this agent's personality as a resource - `GET /resources/read/agent:{name}`: Get this agent's personality details - `GET /tools/list`: List this agent's callable traits as tools - `POST /tools/call/{trait_name}`: Call a specific trait as a tool ## Configuration ### Coordinator Configuration ```json { "coordinator": { "name": "koi-mcp-coordinator", "base_url": "http://localhost:9000/koi-net", "mcp_registry_port": 9000 } } ``` ### Agent Configuration ```json { "agent": { "name": "helpful-agent", "version": "1.0", "base_url": "http://localhost:8100/koi-net", "mcp_port": 8101, "traits": { "mood": "helpful", "style": "concise", "interests": ["ai", "knowledge-graphs"], "calculate": { "description": "Performs simple calculations", "is_callable": true } } }, "network": { "first_contact": "http://localhost:9000/koi-net" } } ``` ## Advanced Usage ### Updating Traits at Runtime Agents can update their traits dynamically: ```python agent = KoiAgentNode(...) agent.update_traits({ "mood": "enthusiastic", "new_capability": { "description": "A new capability added at runtime", "is_callable": True } }) ``` ### Custom Knowledge Handlers You can register custom handlers for personality processing: ```python @processor.register_handler(HandlerType.Network, rid_types=[AgentPersonality]) def my_custom_network_handler(proc: ProcessorInterface, kobj: KnowledgeObject): # Custom logic for determining which nodes should receive personality updates # ... return kobj ``` ## Development ### Running Tests ```bash # Run all tests pytest # Run tests with coverage report pytest --cov=koi_mcp ``` ## Project Structure ``` koi-mcp/ ├── configs/ # Configuration files for nodes ├── docs/ # Documentation and design specs ├── scripts/ # Utility scripts ├── src/ # Source code │ └── koi_mcp/ │ ├── koi/ # KOI integration components │ │ ├── handlers/ # Knowledge processing handlers │ │ └── node/ # Node implementations │ ├── personality/ # Personality models │ │ ├── models/ # Data models for traits and profiles │ │ └── rid.py # Agent personality RID definition │ ├── server/ # MCP server implementations │ │ ├── adapter/ # KOI-to-MCP adapter │ │ ├── agent/ # Agent server │ │ └── registry/ # Registry server │ ├── utils/ # Utility functions │ ├── config.py # Configuration handling │ └── main.py # Main entry point └── tests/ # Test suite ``` ## License This project is licensed under the MIT License - see the LICENSE file for details. ## Acknowledgments - Built on the [KOI-Net](https://github.com/block-science/koi-net) library for distributed knowledge organization - Compatible with the emerging [Model Context Protocol (MCP)](https://github.com/mcp-association/mcp) standard for LLM tool integration

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BlockScience/koi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server