skippy-mcp 0.2.0__tar.gz
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.
- skippy_mcp-0.2.0/.gitignore +4 -0
- skippy_mcp-0.2.0/LICENSE +21 -0
- skippy_mcp-0.2.0/PKG-INFO +130 -0
- skippy_mcp-0.2.0/README.md +111 -0
- skippy_mcp-0.2.0/pyproject.toml +68 -0
- skippy_mcp-0.2.0/src/skippy_mcp/__init__.py +3 -0
- skippy_mcp-0.2.0/src/skippy_mcp/api.py +631 -0
- skippy_mcp-0.2.0/src/skippy_mcp/auth.py +34 -0
- skippy_mcp-0.2.0/src/skippy_mcp/cli.py +75 -0
- skippy_mcp-0.2.0/src/skippy_mcp/client_scope.py +113 -0
- skippy_mcp-0.2.0/src/skippy_mcp/local_tools.py +70 -0
- skippy_mcp-0.2.0/src/skippy_mcp/remote_tools.py +680 -0
- skippy_mcp-0.2.0/src/skippy_mcp/server.py +108 -0
skippy_mcp-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sanvio Labs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: skippy-mcp
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Use Skippy from Claude, Cursor, Kiro and any other MCP client. Private beta.
|
|
5
|
+
Project-URL: Homepage, https://heyskippy.ai
|
|
6
|
+
Author: Sanvio Labs
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Keywords: ai-assistant,mcp,model-context-protocol,skippy
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Requires-Dist: httpx>=0.27.0
|
|
17
|
+
Requires-Dist: mcp<2,>=1.0.0
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
|
|
20
|
+
# Skippy MCP
|
|
21
|
+
|
|
22
|
+
Use Skippy from Claude, Cursor, Kiro, VS Code, or any other MCP client. Your notes, workspace, skills, agents and research live in Skippy, so what you save in one tool is there in the next.
|
|
23
|
+
|
|
24
|
+
**This is a private beta.** Your Skippy account has to be added to it first. If you haven't been invited, ask the Skippy team.
|
|
25
|
+
|
|
26
|
+
## Setup
|
|
27
|
+
|
|
28
|
+
You need two things: a Skippy account in the beta, and [uv](https://docs.astral.sh/uv/getting-started/installation/) installed. Setup takes about five minutes.
|
|
29
|
+
|
|
30
|
+
### 1. Create an API key
|
|
31
|
+
|
|
32
|
+
In Skippy, open **Settings > API Keys** and click **Create new key**. Copy it straight away: Skippy shows it once.
|
|
33
|
+
|
|
34
|
+
### 2. Save the key
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
uvx skippy-mcp auth
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Paste the key when it asks. It saves the key to `~/.skippy/token`, readable only by you, then checks it with Skippy. You should see `✓ Key works.`
|
|
41
|
+
|
|
42
|
+
### 3. Add Skippy to your client
|
|
43
|
+
|
|
44
|
+
Every client runs the same command, `uvx skippy-mcp`. Only where you put it changes.
|
|
45
|
+
|
|
46
|
+
**Claude Code**
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
claude mcp add skippy -- uvx skippy-mcp
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Claude Desktop, Cursor, Kiro and Windsurf** take this block:
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"mcpServers": {
|
|
57
|
+
"skippy": {
|
|
58
|
+
"command": "uvx",
|
|
59
|
+
"args": ["skippy-mcp"]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
| Client | Where it goes |
|
|
66
|
+
|---|---|
|
|
67
|
+
| Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, `%APPDATA%\Claude\claude_desktop_config.json` on Windows |
|
|
68
|
+
| Cursor | `~/.cursor/mcp.json` for every project, or `.cursor/mcp.json` for one |
|
|
69
|
+
| Kiro | `~/.kiro/settings/mcp.json` for every project, or `.kiro/settings/mcp.json` for one |
|
|
70
|
+
| Windsurf | `~/.codeium/windsurf/mcp_config.json` |
|
|
71
|
+
|
|
72
|
+
**VS Code** uses a slightly different shape, in `.vscode/mcp.json`:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"servers": {
|
|
77
|
+
"skippy": {
|
|
78
|
+
"type": "stdio",
|
|
79
|
+
"command": "uvx",
|
|
80
|
+
"args": ["skippy-mcp"]
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Restart the client. Ask it to run `skippy_status`, and you should see your name and plan.
|
|
87
|
+
|
|
88
|
+
## What you can do
|
|
89
|
+
|
|
90
|
+
| Ask for | Tools |
|
|
91
|
+
|---|---|
|
|
92
|
+
| A conversation with Skippy, with its memory of you | `skippy_send`, `skippy_context` |
|
|
93
|
+
| Research | `skippy_web_search`, `skippy_deep_research` |
|
|
94
|
+
| Your files in Skippy | `skippy_workspace_read`, `_write`, `_list`, `_delete` |
|
|
95
|
+
| Notes and a clipboard that follow you between tools | `skippy_save_note`, `skippy_view_notes`, `skippy_clip`, `skippy_paste` |
|
|
96
|
+
| A searchable log of decisions and milestones | `skippy_journal`, `skippy_journal_search` |
|
|
97
|
+
| Saved workflows | `skippy_create_skill`, `skippy_run_skill`, `skippy_list_skills` |
|
|
98
|
+
| Your agents | `skippy_list_agents`, `skippy_invoke_agent`, `skippy_create_agent` |
|
|
99
|
+
| Scheduled jobs | `skippy_schedule_job`, `skippy_list_jobs`, `skippy_cancel_job` |
|
|
100
|
+
| Topics Skippy watches for you | `skippy_radar_add_topic`, `skippy_radar_scan` |
|
|
101
|
+
| Static sites | `skippy_publish_site`, `skippy_share_site`, `skippy_list_sites` |
|
|
102
|
+
| Your usage | `skippy_usage` |
|
|
103
|
+
|
|
104
|
+
Deep research draws on the same monthly research credits as the Skippy app.
|
|
105
|
+
|
|
106
|
+
Four tools run on your own machine instead: `read_local_file`, `list_local_files`, `git_status` and `git_diff`. They can only see the folder your client started the server in. What they read goes to your AI client, the same as any file you open in it, and none of it goes to Skippy.
|
|
107
|
+
|
|
108
|
+
## Troubleshooting
|
|
109
|
+
|
|
110
|
+
**"The Skippy MCP server is in private beta."** Your key works, but your account isn't in the beta yet. Ask the Skippy team to add you.
|
|
111
|
+
|
|
112
|
+
**"This key is invalid or disabled."** The key was revoked, disabled, or mistyped. Create a new one under Settings > API Keys and run `uvx skippy-mcp auth` again.
|
|
113
|
+
|
|
114
|
+
**Your client says it can't find `uvx`.** Desktop apps often start with a shorter `PATH` than your terminal. Run `which uvx` in a terminal and put that full path in `"command"` instead of `uvx`.
|
|
115
|
+
|
|
116
|
+
**To check your setup at any time**, run `uvx skippy-mcp verify`.
|
|
117
|
+
|
|
118
|
+
## Folder-based scoping (optional)
|
|
119
|
+
|
|
120
|
+
If you keep work for different clients or projects in different folders, Skippy can file workspace writes and journal entries under that name automatically. Create `~/.skippy/client_map.json`:
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{ "/work/northwind": "northwind", "/work/contoso": "contoso" }
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
When the server starts in a folder whose path contains one of those fragments, `notes.md` is saved as `clients/northwind/notes.md`. The `SKIPPY_CLIENT_MAP` environment variable takes the same JSON and overrides the file. With neither, nothing is scoped.
|
|
127
|
+
|
|
128
|
+
## Feedback
|
|
129
|
+
|
|
130
|
+
Something broken or missing? Ask your client to run `skippy_submit_feedback`. It goes straight to the team building Skippy.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Skippy MCP
|
|
2
|
+
|
|
3
|
+
Use Skippy from Claude, Cursor, Kiro, VS Code, or any other MCP client. Your notes, workspace, skills, agents and research live in Skippy, so what you save in one tool is there in the next.
|
|
4
|
+
|
|
5
|
+
**This is a private beta.** Your Skippy account has to be added to it first. If you haven't been invited, ask the Skippy team.
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
|
|
9
|
+
You need two things: a Skippy account in the beta, and [uv](https://docs.astral.sh/uv/getting-started/installation/) installed. Setup takes about five minutes.
|
|
10
|
+
|
|
11
|
+
### 1. Create an API key
|
|
12
|
+
|
|
13
|
+
In Skippy, open **Settings > API Keys** and click **Create new key**. Copy it straight away: Skippy shows it once.
|
|
14
|
+
|
|
15
|
+
### 2. Save the key
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
uvx skippy-mcp auth
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Paste the key when it asks. It saves the key to `~/.skippy/token`, readable only by you, then checks it with Skippy. You should see `✓ Key works.`
|
|
22
|
+
|
|
23
|
+
### 3. Add Skippy to your client
|
|
24
|
+
|
|
25
|
+
Every client runs the same command, `uvx skippy-mcp`. Only where you put it changes.
|
|
26
|
+
|
|
27
|
+
**Claude Code**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
claude mcp add skippy -- uvx skippy-mcp
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Claude Desktop, Cursor, Kiro and Windsurf** take this block:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"mcpServers": {
|
|
38
|
+
"skippy": {
|
|
39
|
+
"command": "uvx",
|
|
40
|
+
"args": ["skippy-mcp"]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
| Client | Where it goes |
|
|
47
|
+
|---|---|
|
|
48
|
+
| Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, `%APPDATA%\Claude\claude_desktop_config.json` on Windows |
|
|
49
|
+
| Cursor | `~/.cursor/mcp.json` for every project, or `.cursor/mcp.json` for one |
|
|
50
|
+
| Kiro | `~/.kiro/settings/mcp.json` for every project, or `.kiro/settings/mcp.json` for one |
|
|
51
|
+
| Windsurf | `~/.codeium/windsurf/mcp_config.json` |
|
|
52
|
+
|
|
53
|
+
**VS Code** uses a slightly different shape, in `.vscode/mcp.json`:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"servers": {
|
|
58
|
+
"skippy": {
|
|
59
|
+
"type": "stdio",
|
|
60
|
+
"command": "uvx",
|
|
61
|
+
"args": ["skippy-mcp"]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Restart the client. Ask it to run `skippy_status`, and you should see your name and plan.
|
|
68
|
+
|
|
69
|
+
## What you can do
|
|
70
|
+
|
|
71
|
+
| Ask for | Tools |
|
|
72
|
+
|---|---|
|
|
73
|
+
| A conversation with Skippy, with its memory of you | `skippy_send`, `skippy_context` |
|
|
74
|
+
| Research | `skippy_web_search`, `skippy_deep_research` |
|
|
75
|
+
| Your files in Skippy | `skippy_workspace_read`, `_write`, `_list`, `_delete` |
|
|
76
|
+
| Notes and a clipboard that follow you between tools | `skippy_save_note`, `skippy_view_notes`, `skippy_clip`, `skippy_paste` |
|
|
77
|
+
| A searchable log of decisions and milestones | `skippy_journal`, `skippy_journal_search` |
|
|
78
|
+
| Saved workflows | `skippy_create_skill`, `skippy_run_skill`, `skippy_list_skills` |
|
|
79
|
+
| Your agents | `skippy_list_agents`, `skippy_invoke_agent`, `skippy_create_agent` |
|
|
80
|
+
| Scheduled jobs | `skippy_schedule_job`, `skippy_list_jobs`, `skippy_cancel_job` |
|
|
81
|
+
| Topics Skippy watches for you | `skippy_radar_add_topic`, `skippy_radar_scan` |
|
|
82
|
+
| Static sites | `skippy_publish_site`, `skippy_share_site`, `skippy_list_sites` |
|
|
83
|
+
| Your usage | `skippy_usage` |
|
|
84
|
+
|
|
85
|
+
Deep research draws on the same monthly research credits as the Skippy app.
|
|
86
|
+
|
|
87
|
+
Four tools run on your own machine instead: `read_local_file`, `list_local_files`, `git_status` and `git_diff`. They can only see the folder your client started the server in. What they read goes to your AI client, the same as any file you open in it, and none of it goes to Skippy.
|
|
88
|
+
|
|
89
|
+
## Troubleshooting
|
|
90
|
+
|
|
91
|
+
**"The Skippy MCP server is in private beta."** Your key works, but your account isn't in the beta yet. Ask the Skippy team to add you.
|
|
92
|
+
|
|
93
|
+
**"This key is invalid or disabled."** The key was revoked, disabled, or mistyped. Create a new one under Settings > API Keys and run `uvx skippy-mcp auth` again.
|
|
94
|
+
|
|
95
|
+
**Your client says it can't find `uvx`.** Desktop apps often start with a shorter `PATH` than your terminal. Run `which uvx` in a terminal and put that full path in `"command"` instead of `uvx`.
|
|
96
|
+
|
|
97
|
+
**To check your setup at any time**, run `uvx skippy-mcp verify`.
|
|
98
|
+
|
|
99
|
+
## Folder-based scoping (optional)
|
|
100
|
+
|
|
101
|
+
If you keep work for different clients or projects in different folders, Skippy can file workspace writes and journal entries under that name automatically. Create `~/.skippy/client_map.json`:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{ "/work/northwind": "northwind", "/work/contoso": "contoso" }
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
When the server starts in a folder whose path contains one of those fragments, `notes.md` is saved as `clients/northwind/notes.md`. The `SKIPPY_CLIENT_MAP` environment variable takes the same JSON and overrides the file. With neither, nothing is scoped.
|
|
108
|
+
|
|
109
|
+
## Feedback
|
|
110
|
+
|
|
111
|
+
Something broken or missing? Ask your client to run `skippy_submit_feedback`. It goes straight to the team building Skippy.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "skippy-mcp"
|
|
7
|
+
version = "0.2.0"
|
|
8
|
+
description = "Use Skippy from Claude, Cursor, Kiro and any other MCP client. Private beta."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
authors = [{ name = "Sanvio Labs" }]
|
|
14
|
+
keywords = ["mcp", "skippy", "model-context-protocol", "ai-assistant"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 4 - Beta",
|
|
17
|
+
"Environment :: Console",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"Operating System :: OS Independent",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
]
|
|
22
|
+
dependencies = [
|
|
23
|
+
# `<2` is load-bearing, not caution. mcp 2.0 renamed FastMCP to MCPServer and
|
|
24
|
+
# moved `mcp.server.fastmcp`, so `server.py` does not import under it. The dev
|
|
25
|
+
# environment resolves through uv.lock and never saw this; a published package
|
|
26
|
+
# ignores the lock, so `uvx skippy-mcp serve` picked up 2.x and traced back on
|
|
27
|
+
# the one command the tool exists for. Measured 2026-09-19 against a wheel
|
|
28
|
+
# installed into an empty venv.
|
|
29
|
+
"mcp>=1.0.0,<2",
|
|
30
|
+
"httpx>=0.27.0",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[project.urls]
|
|
34
|
+
Homepage = "https://heyskippy.ai"
|
|
35
|
+
|
|
36
|
+
[project.scripts]
|
|
37
|
+
skippy-mcp = "skippy_mcp.cli:main"
|
|
38
|
+
|
|
39
|
+
[tool.hatch.build.targets.wheel]
|
|
40
|
+
packages = ["src/skippy_mcp"]
|
|
41
|
+
|
|
42
|
+
# The sdist carries the package and nothing else: no tests, no lockfile, nothing
|
|
43
|
+
# written for the people who build Skippy rather than the people who use it.
|
|
44
|
+
[tool.hatch.build.targets.sdist]
|
|
45
|
+
include = ["src/skippy_mcp", "README.md", "LICENSE", "pyproject.toml"]
|
|
46
|
+
|
|
47
|
+
[tool.pytest.ini_options]
|
|
48
|
+
testpaths = ["tests"]
|
|
49
|
+
python_files = ["test_*.py"]
|
|
50
|
+
python_classes = ["Test*"]
|
|
51
|
+
python_functions = ["test_*"]
|
|
52
|
+
addopts = "-v --tb=short"
|
|
53
|
+
|
|
54
|
+
[dependency-groups]
|
|
55
|
+
dev = [
|
|
56
|
+
"pytest>=8.0",
|
|
57
|
+
"pytest-mock>=3.14",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[tool.ruff]
|
|
61
|
+
line-length = 120
|
|
62
|
+
|
|
63
|
+
[tool.ruff.lint]
|
|
64
|
+
select = ["E", "W", "F", "I", "B", "UP"]
|
|
65
|
+
ignore = ["E501"]
|
|
66
|
+
|
|
67
|
+
[tool.ruff.lint.per-file-ignores]
|
|
68
|
+
"tests/**" = ["S101", "S106", "S108", "F841"]
|