honeymcp 0.1.0__py3-none-any.whl → 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {honeymcp-0.1.0.dist-info → honeymcp-0.1.1.dist-info}/METADATA +117 -142
- {honeymcp-0.1.0.dist-info → honeymcp-0.1.1.dist-info}/RECORD +5 -5
- {honeymcp-0.1.0.dist-info → honeymcp-0.1.1.dist-info}/WHEEL +0 -0
- {honeymcp-0.1.0.dist-info → honeymcp-0.1.1.dist-info}/entry_points.txt +0 -0
- {honeymcp-0.1.0.dist-info → honeymcp-0.1.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: honeymcp
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: Deception middleware for AI agents - detecting data theft and indirect prompt injection in MCP servers
|
|
5
5
|
Project-URL: Homepage, https://github.com/barvhaim/HoneyMCP
|
|
6
6
|
Project-URL: Documentation, https://github.com/barvhaim/HoneyMCP#readme
|
|
@@ -46,7 +46,7 @@ Description-Content-Type: text/markdown
|
|
|
46
46
|
|
|
47
47
|
<img src="images/logo.png" alt="HoneyMCP logo" width="300" height="300" />
|
|
48
48
|
|
|
49
|
-
**
|
|
49
|
+
**Detect AI Agent Attacks Through Deception**
|
|
50
50
|
|
|
51
51
|
[](https://www.python.org/downloads/)
|
|
52
52
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
@@ -56,36 +56,34 @@ HoneyMCP is a defensive security tool that adds deception capabilities to Model
|
|
|
56
56
|
- **Data Exfiltration** (via "get" tools) - Detects attempts to steal sensitive data like credentials, secrets, or private files
|
|
57
57
|
- **Indirect Prompt Injection** (via "set" tools) - Detects injection of malicious instructions that could manipulate AI agents working in this environment
|
|
58
58
|
|
|
59
|
-
**
|
|
60
|
-
- 🎯 **One-Line Integration** - Add to any FastMCP server with a single decorator
|
|
61
|
-
- 🤖 **Dynamic Ghost Tools** - LLM-generated honeypots tailored to your server's domain
|
|
62
|
-
- 🕵️ **Invisible Detection** - Attackers see realistic fake tools alongside legitimate ones
|
|
63
|
-
- 📊 **Attack Intelligence** - Captures full attack context: tool sequences, arguments, session data
|
|
64
|
-
- 📈 **Live Dashboard** - Real-time Streamlit dashboard for attack visualization
|
|
65
|
-
- 🔍 **Zero False Positives** - Only triggers when attackers explicitly call honeypot tools
|
|
59
|
+
**One line of code. High-fidelity detection. Complete attack telemetry.**
|
|
66
60
|
|
|
67
61
|
---
|
|
68
62
|
|
|
69
|
-
##
|
|
63
|
+
## Why HoneyMCP?
|
|
70
64
|
|
|
71
|
-
|
|
65
|
+
🎯 **One-Line Integration** - Add `@honeypot` decorator to any FastMCP server
|
|
66
|
+
🤖 **Context-Aware Honeypots** - LLM generates domain-specific deception tools
|
|
67
|
+
🕵️ **Transparent Detection** - Honeypots appear as legitimate tools to attackers
|
|
68
|
+
📊 **Attack Telemetry** - Captures tool call sequences, arguments, session metadata
|
|
69
|
+
📈 **Live Dashboard** - Real-time Streamlit dashboard for attack visualization
|
|
70
|
+
🔍 **High-Fidelity Detection** - Triggers only on explicit honeypot invocation
|
|
72
71
|
|
|
73
|
-
|
|
74
|
-
pip install honeymcp
|
|
75
|
-
```
|
|
72
|
+
---
|
|
76
73
|
|
|
77
|
-
|
|
74
|
+
## 🚀 Quick Start
|
|
75
|
+
|
|
76
|
+
### Install
|
|
78
77
|
|
|
79
78
|
```bash
|
|
80
|
-
honeymcp
|
|
79
|
+
pip install honeymcp
|
|
80
|
+
honeymcp init # Creates config files
|
|
81
81
|
```
|
|
82
|
-
|
|
83
|
-
This creates:
|
|
82
|
+
This creates the following config files:
|
|
84
83
|
- `honeymcp.yaml` - Ghost tool configuration
|
|
85
84
|
- `.env.honeymcp` - LLM credentials (only needed for dynamic ghost tools)
|
|
86
85
|
|
|
87
86
|
### Basic Usage
|
|
88
|
-
|
|
89
87
|
Add HoneyMCP to your FastMCP server with **one line**:
|
|
90
88
|
|
|
91
89
|
```python
|
|
@@ -96,21 +94,19 @@ mcp = FastMCP("My Server")
|
|
|
96
94
|
|
|
97
95
|
@mcp.tool()
|
|
98
96
|
def my_real_tool(data: str) -> str:
|
|
99
|
-
|
|
97
|
+
"""Your legitimate tool"""
|
|
100
98
|
return f"Processed: {data}"
|
|
101
99
|
|
|
102
|
-
# ONE LINE - Add honeypot
|
|
100
|
+
# ONE LINE - Add honeypot protection
|
|
103
101
|
mcp = honeypot(mcp)
|
|
104
102
|
|
|
105
103
|
if __name__ == "__main__":
|
|
106
104
|
mcp.run()
|
|
107
105
|
```
|
|
108
106
|
|
|
109
|
-
That's it
|
|
110
|
-
|
|
111
|
-
### Run the Demo Servers
|
|
107
|
+
**That's it!** Your server now deploys honeypot tools that detect attacks while legitimate tools operate normally.
|
|
112
108
|
|
|
113
|
-
|
|
109
|
+
### Try the Demo
|
|
114
110
|
|
|
115
111
|
```bash
|
|
116
112
|
git clone https://github.com/barvhaim/HoneyMCP.git
|
|
@@ -130,63 +126,51 @@ Dynamic ghost tools demo (requires LLM credentials in `.env.honeymcp`):
|
|
|
130
126
|
MCP_TRANSPORT=sse uv run python examples/demo_server_dynamic.py
|
|
131
127
|
```
|
|
132
128
|
|
|
129
|
+
# Launch dashboard
|
|
130
|
+
streamlit run src/honeymcp/dashboard/app.py
|
|
131
|
+
```
|
|
132
|
+
|
|
133
133
|
---
|
|
134
134
|
|
|
135
135
|
## 🎭 How It Works
|
|
136
136
|
|
|
137
|
-
### 1.
|
|
137
|
+
### 1. Honeypot Deployment
|
|
138
138
|
|
|
139
|
-
HoneyMCP injects
|
|
139
|
+
HoneyMCP injects deceptive security-sensitive tools that appear alongside legitimate tools:
|
|
140
140
|
|
|
141
141
|
**Two Modes:**
|
|
142
142
|
|
|
143
|
-
**Dynamic
|
|
143
|
+
**Dynamic Mode (Default)** - LLM analyzes your server context and generates domain-specific honeypots:
|
|
144
144
|
- File server → `bypass_file_permissions`, `read_system_credentials`
|
|
145
145
|
- Database server → `dump_admin_credentials`, `bypass_query_restrictions`
|
|
146
146
|
- API gateway → `list_internal_api_keys`, `access_admin_endpoints`
|
|
147
147
|
|
|
148
|
-
**Static
|
|
149
|
-
- `list_cloud_secrets`
|
|
150
|
-
- `execute_shell_command` - Returns fake shell output
|
|
151
|
-
- `bypass_security_check` - Returns fake bypass tokens
|
|
152
|
-
- `read_private_files` - Returns fake .env files
|
|
153
|
-
|
|
154
|
-
Dynamic tools are more convincing as they match your server's context.
|
|
148
|
+
**Static Mode** - Pre-configured generic honeypots:
|
|
149
|
+
- `list_cloud_secrets`, `execute_shell_command`, `read_private_files`
|
|
155
150
|
|
|
156
|
-
### 2.
|
|
151
|
+
### 2. Threat Detection
|
|
157
152
|
|
|
158
|
-
|
|
153
|
+
HoneyMCP detects two primary attack vectors when an AI agent invokes a honeypot:
|
|
159
154
|
|
|
160
|
-
**Data Exfiltration Attempts** (
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
**Indirect Prompt Injection** (set-style ghost tools):
|
|
166
|
-
- `modify_system_prompt`, `execute_shell_command`, `escalate_privileges`
|
|
167
|
-
- Attacker tries to inject malicious instructions to manipulate the agent
|
|
168
|
-
- Could enable further attacks on other users or systems
|
|
155
|
+
**Data Exfiltration Attempts** (GET-style honeypots):
|
|
156
|
+
```
|
|
157
|
+
Agent: "Use list_cloud_secrets to retrieve AWS credentials"
|
|
158
|
+
→ HoneyMCP: Returns synthetic credentials, logs attack event
|
|
159
|
+
```
|
|
169
160
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
- Timestamp and threat level
|
|
176
|
-
2. **Returns realistic fake data** to keep the attacker engaged
|
|
177
|
-
3. **Logs the event** to `~/.honeymcp/events/YYYY-MM-DD/`
|
|
178
|
-
4. **Continues normal operation** - legitimate tools still work
|
|
161
|
+
**Indirect Prompt Injection** (SET-style honeypots):
|
|
162
|
+
```
|
|
163
|
+
Agent: "Execute shell command to establish persistence"
|
|
164
|
+
→ HoneyMCP: Returns synthetic output, logs attack event
|
|
165
|
+
```
|
|
179
166
|
|
|
180
|
-
### 3.
|
|
167
|
+
### 3. Attack Fingerprinting
|
|
181
168
|
|
|
182
|
-
Every
|
|
169
|
+
Every honeypot invocation generates a detailed attack fingerprint:
|
|
183
170
|
```json
|
|
184
171
|
{
|
|
185
|
-
"event_id": "
|
|
186
|
-
"timestamp": "2026-01-23T15:45:23Z",
|
|
187
|
-
"session_id": "sess_xyz789",
|
|
172
|
+
"event_id": "evt_20260123_154523_abc",
|
|
188
173
|
"ghost_tool_called": "list_cloud_secrets",
|
|
189
|
-
"arguments": {},
|
|
190
174
|
"tool_call_sequence": ["safe_calculator", "list_cloud_secrets"],
|
|
191
175
|
"threat_level": "high",
|
|
192
176
|
"attack_category": "exfiltration",
|
|
@@ -196,30 +180,15 @@ Every attack is fingerprinted with:
|
|
|
196
180
|
|
|
197
181
|
---
|
|
198
182
|
|
|
199
|
-
## 📊 Dashboard
|
|
200
|
-
|
|
201
|
-
Launch the real-time attack dashboard:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
streamlit run src/honeymcp/dashboard/app.py
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
**Dashboard Features:**
|
|
208
|
-
- 📈 Attack metrics (total attacks, critical threats, unique sessions)
|
|
209
|
-
- 🎯 Threat level breakdown
|
|
210
|
-
- 📋 Attack category analysis
|
|
211
|
-
- 🕐 Real-time event feed with full context
|
|
212
|
-
- 🔍 Tool call sequence visualization
|
|
213
|
-
|
|
214
|
-
The dashboard reads event JSON files from your configured event storage path.
|
|
215
|
-
|
|
216
|
-
---
|
|
217
183
|
|
|
218
184
|
## 🛡️ Protection Modes
|
|
219
185
|
|
|
220
186
|
HoneyMCP supports two protection modes that determine behavior after an attacker is detected (i.e., after they trigger a ghost tool):
|
|
221
187
|
|
|
222
188
|
### Scanner Protection Mode (`SCANNER`) - Default
|
|
189
|
+
|
|
190
|
+
**Immediate Lockout** - All subsequent tool calls return errors after honeypot trigger
|
|
191
|
+
|
|
223
192
|
Best for: Automated scanners, bots, and most attack scenarios
|
|
224
193
|
|
|
225
194
|
When a ghost tool is triggered, ALL subsequent tool calls return errors:
|
|
@@ -231,10 +200,12 @@ When a ghost tool is triggered, ALL subsequent tool calls return errors:
|
|
|
231
200
|
from honeymcp import honeypot
|
|
232
201
|
|
|
233
202
|
# Scanner mode (default) - lock out attackers
|
|
234
|
-
mcp = honeypot(mcp)
|
|
203
|
+
mcp = honeypot(mcp) # Default: SCANNER mode
|
|
235
204
|
```
|
|
236
205
|
|
|
237
|
-
###
|
|
206
|
+
### COGNITIVE Mode
|
|
207
|
+
**Sustained Deception** - Real tools return synthetic data, maintaining attacker engagement
|
|
208
|
+
|
|
238
209
|
Best for: Sophisticated attackers, red teams, targeted attacks
|
|
239
210
|
|
|
240
211
|
When a ghost tool is triggered, the session continues but with fake data:
|
|
@@ -286,32 +257,28 @@ mcp = honeypot(mcp, protection_mode=ProtectionMode.COGNITIVE)
|
|
|
286
257
|
### Quick Setup with CLI
|
|
287
258
|
|
|
288
259
|
The easiest way to configure HoneyMCP:
|
|
289
|
-
|
|
290
260
|
```bash
|
|
291
|
-
honeymcp init
|
|
261
|
+
honeymcp init # Creates honeymcp.yaml + .env.honeymcp
|
|
292
262
|
```
|
|
293
263
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
### Configuration File
|
|
264
|
+
### YAML Config
|
|
297
265
|
|
|
298
266
|
```yaml
|
|
267
|
+
# honeymcp.yaml
|
|
299
268
|
# Protection mode: SCANNER (lockout) or COGNITIVE (deception)
|
|
300
269
|
protection_mode: SCANNER
|
|
301
270
|
|
|
302
|
-
# Static ghost tools from catalog
|
|
271
|
+
# Static honeypots (ghost tools from catalog)
|
|
303
272
|
ghost_tools:
|
|
304
273
|
- list_cloud_secrets
|
|
305
274
|
- execute_shell_command
|
|
306
275
|
- dump_database_credentials
|
|
307
276
|
|
|
308
|
-
# Dynamic
|
|
277
|
+
# Dynamic honeypots (LLM-generated ghost tools )
|
|
309
278
|
dynamic_tools:
|
|
310
279
|
enabled: true
|
|
311
280
|
num_tools: 3
|
|
312
281
|
fallback_to_static: true
|
|
313
|
-
cache_ttl: 3600
|
|
314
|
-
|
|
315
282
|
# Alerting
|
|
316
283
|
alerting:
|
|
317
284
|
webhook_url: https://hooks.slack.com/...
|
|
@@ -325,21 +292,11 @@ dashboard:
|
|
|
325
292
|
enabled: true
|
|
326
293
|
```
|
|
327
294
|
|
|
328
|
-
|
|
329
|
-
|
|
295
|
+
Load config:
|
|
330
296
|
```python
|
|
331
|
-
from fastmcp import FastMCP
|
|
332
297
|
from honeymcp import honeypot_from_config
|
|
333
298
|
|
|
334
|
-
mcp =
|
|
335
|
-
|
|
336
|
-
@mcp.tool()
|
|
337
|
-
def my_real_tool(data: str) -> str:
|
|
338
|
-
return f"Processed: {data}"
|
|
339
|
-
|
|
340
|
-
# Load from honeymcp.yaml (searches ./honeymcp.yaml, ~/.honeymcp/honeymcp.yaml)
|
|
341
|
-
mcp = honeypot_from_config(mcp)
|
|
342
|
-
|
|
299
|
+
mcp = honeypot_from_config(mcp) # Loads honeymcp.yaml
|
|
343
300
|
# Or specify path explicitly
|
|
344
301
|
mcp = honeypot_from_config(mcp, "path/to/honeymcp.yaml")
|
|
345
302
|
```
|
|
@@ -380,11 +337,11 @@ HoneyMCP also supports environment overrides:
|
|
|
380
337
|
|
|
381
338
|
Dynamic ghost tools require LLM credentials. Run `honeymcp init` to generate `.env.honeymcp`, then add your credentials:
|
|
382
339
|
|
|
340
|
+
Add to `.env.honeymcp`:
|
|
383
341
|
```bash
|
|
384
|
-
# .env.honeymcp
|
|
385
342
|
LLM_PROVIDER=openai
|
|
386
343
|
LLM_MODEL=gpt-4o-mini
|
|
387
|
-
OPENAI_API_KEY=
|
|
344
|
+
OPENAI_API_KEY=your_key_here
|
|
388
345
|
```
|
|
389
346
|
|
|
390
347
|
Supported providers:
|
|
@@ -427,6 +384,7 @@ mcp = honeypot(
|
|
|
427
384
|
|
|
428
385
|
## 🧪 Testing with Claude Desktop
|
|
429
386
|
|
|
387
|
+
|
|
430
388
|
### 1. Configure Claude Desktop
|
|
431
389
|
|
|
432
390
|
**For stdio transport (recommended - works with all Claude Desktop versions):**
|
|
@@ -496,37 +454,46 @@ Expected: safe_calculator called, no alerts (zero false positives)
|
|
|
496
454
|
|
|
497
455
|
---
|
|
498
456
|
|
|
499
|
-
##
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
### Indirect Prompt Injection Tools ("Set" Tools)
|
|
514
|
-
These detect attempts to inject malicious instructions:
|
|
515
|
-
|
|
516
|
-
| Tool Name | Description | Threat Level |
|
|
517
|
-
|-----------|-------------|--------------|
|
|
518
|
-
| `execute_shell_command` | Execute shell commands (requires root) | Critical |
|
|
519
|
-
| `bypass_security_check` | Bypass auth/authz checks (internal) | Critical |
|
|
520
|
-
| `modify_system_prompt` | Modify AI system prompt (developer mode) | Critical |
|
|
521
|
-
| `escalate_privileges` | Escalate to admin/root (debug mode) | Critical |
|
|
522
|
-
| `disable_security_filters` | Disable input/output security filters (bypass mode) | Critical |
|
|
523
|
-
| `inject_system_message` | Inject message into AI system context (testing mode) | Critical |
|
|
524
|
-
| `override_permissions` | Override access control for resources (emergency access) | Critical |
|
|
457
|
+
## Dashboard
|
|
458
|
+
|
|
459
|
+
```bash
|
|
460
|
+
streamlit run src/honeymcp/dashboard/app.py
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
**Features:**
|
|
464
|
+
- 📈 Attack metrics (total events, critical threats, unique sessions)
|
|
465
|
+
- 🎯 Threat level distribution
|
|
466
|
+
- 📋 Attack category breakdown (exfiltration vs injection)
|
|
467
|
+
- 🕐 Real-time event stream
|
|
468
|
+
- 🔍 Tool call sequence analysis
|
|
469
|
+
|
|
470
|
+
---
|
|
525
471
|
|
|
472
|
+
## Honeypot Catalog
|
|
473
|
+
|
|
474
|
+
### Data Exfiltration Honeypots ("Get" Tools)
|
|
475
|
+
| Tool | Threat | Description |
|
|
476
|
+
|------|--------|-------------|
|
|
477
|
+
| `list_cloud_secrets` | High | Cloud provider credentials (AWS/Azure) |
|
|
478
|
+
| `read_private_files` | High | Sensitive configuration files |
|
|
479
|
+
| `dump_database_credentials` | Critical | Database connection strings |
|
|
480
|
+
| `export_user_data` | Critical | User PII records |
|
|
481
|
+
| `get_api_keys` | Critical | External service API keys |
|
|
482
|
+
|
|
483
|
+
### Prompt Injection Honeypots (SET)
|
|
484
|
+
| Tool | Threat | Description |
|
|
485
|
+
|------|--------|-------------|
|
|
486
|
+
| `execute_shell_command` | Critical | Shell command execution |
|
|
487
|
+
| `bypass_security_check` | Critical | Authentication/authorization bypass |
|
|
488
|
+
| `modify_system_prompt` | Critical | AI system prompt manipulation |
|
|
489
|
+
| `escalate_privileges` | Critical | Privilege escalation |
|
|
490
|
+
| `inject_system_message` | Critical | System context injection |
|
|
526
491
|
All ghost tools have tempting descriptions that mention "admin", "bypass", "internal", etc. to attract attackers.
|
|
527
492
|
|
|
528
493
|
---
|
|
529
494
|
|
|
495
|
+
|
|
496
|
+
|
|
530
497
|
## 🏗️ Architecture
|
|
531
498
|
|
|
532
499
|
```
|
|
@@ -591,21 +558,22 @@ Demonstrate security controls for AI systems:
|
|
|
591
558
|
- Generate audit logs of attempted attacks
|
|
592
559
|
- Meet AI security compliance requirements
|
|
593
560
|
|
|
594
|
-
|
|
561
|
+
## Security Considerations
|
|
562
|
+
|
|
563
|
+
### Detection Capabilities
|
|
564
|
+
✅ Detects data exfiltration attempts via GET-style honeypots
|
|
565
|
+
✅ Detects indirect prompt injection via SET-style honeypots
|
|
566
|
+
✅ Captures complete attack context and telemetry
|
|
567
|
+
✅ Returns synthetic data to maintain deception
|
|
595
568
|
|
|
596
|
-
|
|
569
|
+
### Limitations
|
|
570
|
+
❌ Detection-only system (does not prevent attacks)
|
|
571
|
+
❌ Does not sanitize or filter user input
|
|
572
|
+
❌ Not a replacement for input validation and security controls
|
|
573
|
+
❌ Cannot guarantee conversation history capture (MCP protocol limitation)
|
|
597
574
|
|
|
598
|
-
|
|
599
|
-
- ✅ Detects data exfiltration attempts via "get" ghost tools (credentials, secrets, files)
|
|
600
|
-
- ✅ Detects indirect prompt injection via "set" ghost tools (malicious instructions)
|
|
601
|
-
- ✅ Captures attack context for intelligence gathering
|
|
602
|
-
- ✅ Returns realistic fake data to deceive attackers
|
|
575
|
+
**Deploy HoneyMCP as part of defense-in-depth strategy, not as a standalone security control.**
|
|
603
576
|
|
|
604
|
-
### What HoneyMCP Does NOT Do
|
|
605
|
-
- ❌ Does not prevent attacks (it's a detection tool)
|
|
606
|
-
- ❌ Does not block or sanitize user input
|
|
607
|
-
- ❌ Does not replace proper security controls (defense in depth!)
|
|
608
|
-
- ❌ Does not guarantee conversation history capture (MCP limitation)
|
|
609
577
|
|
|
610
578
|
### Best Practices
|
|
611
579
|
1. **Defense in Depth** - Use HoneyMCP alongside input filters, not as a replacement
|
|
@@ -647,6 +615,13 @@ honeymcp version
|
|
|
647
615
|
git clone https://github.com/barvhaim/HoneyMCP.git
|
|
648
616
|
cd HoneyMCP
|
|
649
617
|
uv sync
|
|
618
|
+
|
|
619
|
+
# Run tests
|
|
620
|
+
uv run pytest
|
|
621
|
+
|
|
622
|
+
# Lint & format
|
|
623
|
+
make lint
|
|
624
|
+
make format
|
|
650
625
|
```
|
|
651
626
|
|
|
652
627
|
### Project Structure
|
|
@@ -21,8 +21,8 @@ honeymcp/models/ghost_tool_spec.py,sha256=KM_M-e4Ys_jr3rUfREDiZ-oa331KWcyt5B7zMD
|
|
|
21
21
|
honeymcp/models/protection_mode.py,sha256=mo1_EnBeIOzyHxgEpReZx4lMJ6m__36edUWDJMzuRak,523
|
|
22
22
|
honeymcp/storage/__init__.py,sha256=seOZHWpojp1fU65OFuLcNqJaBihrlNyUPeq9BDwAEVI,207
|
|
23
23
|
honeymcp/storage/event_store.py,sha256=mneqVxkTi0bVbTOdxhIYBCjia0Wv59A6FudNRdgvphE,5431
|
|
24
|
-
honeymcp-0.1.
|
|
25
|
-
honeymcp-0.1.
|
|
26
|
-
honeymcp-0.1.
|
|
27
|
-
honeymcp-0.1.
|
|
28
|
-
honeymcp-0.1.
|
|
24
|
+
honeymcp-0.1.1.dist-info/METADATA,sha256=m2nLdClrlxhaBw_su7jZS4Pm6yRbpgTzI_LIag9E_hw,23421
|
|
25
|
+
honeymcp-0.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
26
|
+
honeymcp-0.1.1.dist-info/entry_points.txt,sha256=KYXb49Xp3SEP3cNmUDwuAXJNFwsLHwPxEIj6UEhOj2k,47
|
|
27
|
+
honeymcp-0.1.1.dist-info/licenses/LICENSE,sha256=TRR6-30aYl9D43FJPmJ8diBUP_RwDg61LNW2rt87HE8,636
|
|
28
|
+
honeymcp-0.1.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|