100 lines
2.9 KiB
Markdown
100 lines
2.9 KiB
Markdown
# RAG Retrieve
|
|
|
|
An example autoload skill that demonstrates how to integrate `rag-retrieve` and `table-rag-retrieve` through Claude Plugins hooks and an MCP server.
|
|
|
|
## Overview
|
|
|
|
This skill uses a `PrePrompt` hook to inject retrieval guidance into the prompt, and starts an MCP server that exposes retrieval capabilities for the current bot.
|
|
|
|
### PrePrompt Hook
|
|
Runs when the system prompt is loaded and injects retrieval policy content.
|
|
- File: `hooks/pre_prompt.py`
|
|
- Purpose: load retrieval instructions and add them to the prompt context
|
|
|
|
### MCP Server
|
|
Provides retrieval tools over stdio for the current `bot_id`.
|
|
- File: `rag_retrieve_server.py`
|
|
- Purpose: expose `rag-retrieve` and related retrieval tools to the agent
|
|
|
|
## Directory Structure
|
|
|
|
```text
|
|
rag-retrieve/
|
|
├── README.md # Skill documentation
|
|
├── .claude-plugin/
|
|
│ └── plugin.json # Hook and MCP server configuration
|
|
├── hooks/
|
|
│ ├── pre_prompt.py # PrePrompt hook script
|
|
│ └── retrieval-policy.md # Retrieval policy injected into the prompt
|
|
├── mcp_common.py # Shared MCP utilities
|
|
├── rag_retrieve_server.py # MCP server entrypoint
|
|
└── rag_retrieve_tools.json # Tool definitions
|
|
```
|
|
|
|
## `plugin.json` Format
|
|
|
|
```json
|
|
{
|
|
"name": "rag-retrieve",
|
|
"description": "rag-retrieve and table-rag-retrieve",
|
|
"hooks": {
|
|
"PrePrompt": [
|
|
{
|
|
"type": "command",
|
|
"command": "python hooks/pre_prompt.py"
|
|
}
|
|
]
|
|
},
|
|
"mcpServers": {
|
|
"rag_retrieve": {
|
|
"transport": "stdio",
|
|
"command": "python",
|
|
"args": [
|
|
"./skills_autoload/rag-retrieve/rag_retrieve_server.py",
|
|
"{bot_id}"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Hook Script Behavior
|
|
|
|
The hook script runs as a subprocess, receives input through environment variables, and writes the injected content to stdout.
|
|
|
|
### Available Environment Variables
|
|
|
|
| Environment Variable | Description | Applies To |
|
|
|----------------------|-------------|------------|
|
|
| `ASSISTANT_ID` | Bot ID | All hooks |
|
|
| `USER_IDENTIFIER` | User identifier | All hooks |
|
|
| `SESSION_ID` | Session ID | All hooks |
|
|
| `LANGUAGE` | Language code | All hooks |
|
|
| `HOOK_TYPE` | Hook type | All hooks |
|
|
|
|
### PrePrompt Example
|
|
|
|
```python
|
|
#!/usr/bin/env python3
|
|
import os
|
|
import sys
|
|
|
|
|
|
def main():
|
|
user_identifier = os.environ.get('USER_IDENTIFIER', '')
|
|
bot_id = os.environ.get('ASSISTANT_ID', '')
|
|
|
|
print(f"## Retrieval Context\n\nUser: {user_identifier}\nBot: {bot_id}")
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|
|
```
|
|
|
|
## Example Use Cases
|
|
|
|
1. **Prompt-time retrieval guidance**: inject retrieval rules before the model starts reasoning
|
|
2. **Bot-specific retrieval setup**: start the MCP server with the current `bot_id`
|
|
3. **Unified retrieval access**: expose RAG and table RAG tools through a single skill
|