anchorlink 0.1.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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Steven Quinn Singleton
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,105 @@
1
+ Metadata-Version: 2.4
2
+ Name: anchorlink
3
+ Version: 0.1.0
4
+ Summary: Anchorlink Local — a secure desktop link for Claude
5
+ Project-URL: Homepage, https://github.com/quintessence-proof/anchorlink
6
+ Project-URL: Issues, https://github.com/quintessence-proof/anchorlink/issues
7
+ Author: Steven Quinn Singleton
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Keywords: ai-tools,anthropic,claude,desktop,filesystem,local,mcp,process
11
+ Classifier: Development Status :: 1 - Planning
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: MacOS
16
+ Classifier: Operating System :: Microsoft :: Windows
17
+ Classifier: Operating System :: POSIX :: Linux
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: System :: Systems Administration
23
+ Classifier: Topic :: Utilities
24
+ Requires-Python: >=3.11
25
+ Requires-Dist: mcp>=1.0.0
26
+ Provides-Extra: windows
27
+ Requires-Dist: pywinpty>=2.0.0; extra == 'windows'
28
+ Description-Content-Type: text/markdown
29
+
30
+ # Anchorlink Local
31
+
32
+ **A secure desktop link for Claude.**
33
+
34
+ Anchorlink Local is a lean, hardened MCP server that gives Claude reliable,
35
+ first-party access to your local machine — filesystem, processes, terminal
36
+ sessions, and search — without telemetry, without third-party service
37
+ dependencies, and without the bloat of a full desktop application.
38
+
39
+ ---
40
+
41
+ ## What it does
42
+
43
+ Anchorlink Local implements the [Model Context Protocol](https://modelcontextprotocol.io)
44
+ over stdio, making the following capabilities available to Claude for macOS,
45
+ Claude for Windows, and any MCP-compatible client:
46
+
47
+ | Capability | Notes |
48
+ |---|---|
49
+ | File system operations | Read, write, create, delete, move, copy, stat |
50
+ | Structured file editing | str_replace and line-range patching |
51
+ | Command execution | Via argument list — no `shell=True`, no metacharacter exposure |
52
+ | Terminal session persistence | Stateful PTY sessions across tool calls |
53
+ | File search | ripgrep primary, pathlib fallback |
54
+ | Process listing and termination | Cross-platform via psutil |
55
+ | Configuration controls | Allowed directories, blocked commands, runtime reload |
56
+ | SSH bridge (optional) | Remote access via local OpenSSH — no cloud accounts required |
57
+
58
+ ## Design principles
59
+
60
+ - **No telemetry.** Zero outbound connections to third-party analytics services.
61
+ - **No UI layer.** Claude renders natively. No CDN dependency, no iframe complexity.
62
+ - **No shell injection surface.** All process execution uses `execvp`-style argument
63
+ lists. Shell metacharacters cannot reach the interpreter.
64
+ - **Path guard runs twice.** Symlink resolution and directory boundary checks happen
65
+ at input validation *and* immediately before each file operation, eliminating the
66
+ TOCTOU window present in comparable tools.
67
+ - **Audit-ready logging.** Local log file, owner-only permissions, argument values
68
+ redacted by key pattern. The log tells you what was called, never what was passed.
69
+ - **Minimal dependencies.** Targets 4–5 runtime packages. No framework, no ORM,
70
+ no cloud SDK.
71
+
72
+ ## Installation
73
+
74
+ > **Note:** Full implementation is in progress. This release reserves the namespace.
75
+ > Subscribe to releases on GitHub for availability updates.
76
+
77
+ When available, the recommended installation method is `uvx` — no Python
78
+ environment management required:
79
+
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "anchorlink": {
84
+ "command": "uvx",
85
+ "args": ["anchorlink"]
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ Add this block to:
92
+ - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
93
+ - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
94
+
95
+ ## Platform support
96
+
97
+ | Platform | Status |
98
+ |---|---|
99
+ | macOS (Apple Silicon + Intel) | Primary |
100
+ | Linux | Supported |
101
+ | Windows 10/11 | Supported (requires `anchorlink[windows]` for PTY sessions) |
102
+
103
+ ## License
104
+
105
+ MIT — Copyright © 2026 Steven Quinn Singleton
@@ -0,0 +1,76 @@
1
+ # Anchorlink Local
2
+
3
+ **A secure desktop link for Claude.**
4
+
5
+ Anchorlink Local is a lean, hardened MCP server that gives Claude reliable,
6
+ first-party access to your local machine — filesystem, processes, terminal
7
+ sessions, and search — without telemetry, without third-party service
8
+ dependencies, and without the bloat of a full desktop application.
9
+
10
+ ---
11
+
12
+ ## What it does
13
+
14
+ Anchorlink Local implements the [Model Context Protocol](https://modelcontextprotocol.io)
15
+ over stdio, making the following capabilities available to Claude for macOS,
16
+ Claude for Windows, and any MCP-compatible client:
17
+
18
+ | Capability | Notes |
19
+ |---|---|
20
+ | File system operations | Read, write, create, delete, move, copy, stat |
21
+ | Structured file editing | str_replace and line-range patching |
22
+ | Command execution | Via argument list — no `shell=True`, no metacharacter exposure |
23
+ | Terminal session persistence | Stateful PTY sessions across tool calls |
24
+ | File search | ripgrep primary, pathlib fallback |
25
+ | Process listing and termination | Cross-platform via psutil |
26
+ | Configuration controls | Allowed directories, blocked commands, runtime reload |
27
+ | SSH bridge (optional) | Remote access via local OpenSSH — no cloud accounts required |
28
+
29
+ ## Design principles
30
+
31
+ - **No telemetry.** Zero outbound connections to third-party analytics services.
32
+ - **No UI layer.** Claude renders natively. No CDN dependency, no iframe complexity.
33
+ - **No shell injection surface.** All process execution uses `execvp`-style argument
34
+ lists. Shell metacharacters cannot reach the interpreter.
35
+ - **Path guard runs twice.** Symlink resolution and directory boundary checks happen
36
+ at input validation *and* immediately before each file operation, eliminating the
37
+ TOCTOU window present in comparable tools.
38
+ - **Audit-ready logging.** Local log file, owner-only permissions, argument values
39
+ redacted by key pattern. The log tells you what was called, never what was passed.
40
+ - **Minimal dependencies.** Targets 4–5 runtime packages. No framework, no ORM,
41
+ no cloud SDK.
42
+
43
+ ## Installation
44
+
45
+ > **Note:** Full implementation is in progress. This release reserves the namespace.
46
+ > Subscribe to releases on GitHub for availability updates.
47
+
48
+ When available, the recommended installation method is `uvx` — no Python
49
+ environment management required:
50
+
51
+ ```json
52
+ {
53
+ "mcpServers": {
54
+ "anchorlink": {
55
+ "command": "uvx",
56
+ "args": ["anchorlink"]
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ Add this block to:
63
+ - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
64
+ - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
65
+
66
+ ## Platform support
67
+
68
+ | Platform | Status |
69
+ |---|---|
70
+ | macOS (Apple Silicon + Intel) | Primary |
71
+ | Linux | Supported |
72
+ | Windows 10/11 | Supported (requires `anchorlink[windows]` for PTY sessions) |
73
+
74
+ ## License
75
+
76
+ MIT — Copyright © 2026 Steven Quinn Singleton
@@ -0,0 +1,169 @@
1
+ # Anchorlink — PyPI Namespace Reservation
2
+ ## Step-by-step instructions
3
+
4
+ ---
5
+
6
+ ## What you'll do
7
+
8
+ 1. Create a PyPI account (you, in browser — 5 min)
9
+ 2. Enable two-factor authentication (you, in browser — 2 min)
10
+ 3. Generate an API token (you, in browser — 1 min)
11
+ 4. Install uv if not already present (Terminal — 30 sec)
12
+ 5. Build and publish the stub package (Terminal — 2 min)
13
+
14
+ Total time: under 15 minutes.
15
+
16
+ ---
17
+
18
+ ## Step 1 — Create your PyPI account
19
+
20
+ Open: https://pypi.org/account/register/
21
+
22
+ Fill in:
23
+ - Username (this becomes part of your package's public identity)
24
+ - Email
25
+ - Password
26
+
27
+ Submit the form and verify your email address.
28
+
29
+ ---
30
+
31
+ ## Step 2 — Enable two-factor authentication (required for publishing)
32
+
33
+ PyPI now requires 2FA on all accounts that publish packages.
34
+
35
+ 1. Go to: https://pypi.org/manage/account/two-factor/
36
+ 2. Choose either:
37
+ - **Authenticator app** (recommended — works with 1Password, Authy, Google Authenticator)
38
+ - **Security key** (FIDO2/WebAuthn hardware key)
39
+ 3. Complete setup and save your recovery codes somewhere secure.
40
+
41
+ ---
42
+
43
+ ## Step 3 — Generate an API token
44
+
45
+ This token authorizes `uv publish` without your password.
46
+
47
+ 1. Go to: https://pypi.org/manage/account/token/
48
+ 2. Click **Add API token**
49
+ 3. Name it: `anchorlink-initial-publish`
50
+ 4. Scope: **Entire account** (you can scope it to the project after first publish)
51
+ 5. Click **Generate token**
52
+ 6. **Copy the token now** — it will not be shown again. It starts with `pypi-`.
53
+
54
+ Store it somewhere safe (1Password, your password manager, etc.).
55
+
56
+ ---
57
+
58
+ ## Step 4 — Install uv (if not already present)
59
+
60
+ Open Terminal and run:
61
+
62
+ ```bash
63
+ curl -LsSf https://astral.sh/uv/install.sh | sh
64
+ ```
65
+
66
+ Verify:
67
+ ```bash
68
+ uv --version
69
+ # Expected: uv 0.x.x
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Step 5 — Build and publish
75
+
76
+ The package files are in the `anchorlink-reserve/` folder from this package.
77
+ Copy it to your working directory, then:
78
+
79
+ ```bash
80
+ # Navigate to the package directory
81
+ cd path/to/anchorlink-reserve
82
+
83
+ # Verify the structure looks right
84
+ ls -la
85
+ # Expected:
86
+ # pyproject.toml
87
+ # README.md
88
+ # LICENSE
89
+ # src/
90
+ # anchorlink/
91
+ # __init__.py
92
+
93
+ # Install hatchling (the build backend — used once)
94
+ uv tool install hatchling
95
+
96
+ # Build the distribution packages
97
+ uv build
98
+
99
+ # Verify the build output
100
+ ls dist/
101
+ # Expected:
102
+ # anchorlink-0.1.0-py3-none-any.whl
103
+ # anchorlink-0.1.0.tar.gz
104
+
105
+ # Publish to PyPI
106
+ # Replace <your-token> with the pypi-... token from Step 3
107
+ UV_PUBLISH_TOKEN=<your-token> uv publish
108
+ ```
109
+
110
+ You will see output like:
111
+ ```
112
+ Publishing anchorlink 0.1.0 to https://upload.pypi.org/legacy/
113
+ Uploading anchorlink-0.1.0-py3-none-any.whl
114
+ Uploading anchorlink-0.1.0.tar.gz
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Step 6 — Verify the reservation
120
+
121
+ Open: https://pypi.org/project/anchorlink/
122
+
123
+ You should see the project page with the README rendered.
124
+ The namespace is now yours.
125
+
126
+ ---
127
+
128
+ ## Optional: Test on TestPyPI first
129
+
130
+ TestPyPI is a staging environment — safe to experiment on without affecting
131
+ production. Recommended if you want to verify the page renders correctly
132
+ before the real publish.
133
+
134
+ 1. Create a separate account at: https://test.pypi.org/account/register/
135
+ 2. Generate a token at: https://test.pypi.org/manage/account/token/
136
+ 3. Publish to test first:
137
+
138
+ ```bash
139
+ UV_PUBLISH_TOKEN=<test-token> uv publish --publish-url https://test.pypi.org/legacy/
140
+ ```
141
+
142
+ 4. Check: https://test.pypi.org/project/anchorlink/
143
+ 5. When satisfied, run the production publish from Step 5.
144
+
145
+ ---
146
+
147
+ ## After reservation — next steps
148
+
149
+ Once the namespace is held, update `pyproject.toml`:
150
+ - Set the correct GitHub URL once you create the repo
151
+ - Update `authors` with your preferred public name/email
152
+
153
+ When implementation begins, bump version to `0.2.0` and add the real
154
+ dependencies and source files. PyPI allows unlimited version publishes
155
+ under the same name once you own it.
156
+
157
+ ---
158
+
159
+ ## Package structure reference
160
+
161
+ ```
162
+ anchorlink-reserve/
163
+ ├── pyproject.toml ← Package metadata and build config
164
+ ├── README.md ← PyPI landing page (renders on project page)
165
+ ├── LICENSE ← MIT license
166
+ └── src/
167
+ └── anchorlink/
168
+ └── __init__.py ← Stub main() entrypoint
169
+ ```
@@ -0,0 +1,60 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "anchorlink"
7
+ version = "0.1.0"
8
+ description = "Anchorlink Local — a secure desktop link for Claude"
9
+ readme = "README.md"
10
+ license = { text = "MIT" }
11
+ requires-python = ">=3.11"
12
+ authors = [
13
+ { name = "Steven Quinn Singleton" }
14
+ ]
15
+ keywords = [
16
+ "mcp",
17
+ "claude",
18
+ "anthropic",
19
+ "desktop",
20
+ "local",
21
+ "filesystem",
22
+ "process",
23
+ "ai-tools",
24
+ ]
25
+ classifiers = [
26
+ "Development Status :: 1 - Planning",
27
+ "Intended Audience :: Developers",
28
+ "Intended Audience :: End Users/Desktop",
29
+ "License :: OSI Approved :: MIT License",
30
+ "Operating System :: MacOS",
31
+ "Operating System :: POSIX :: Linux",
32
+ "Operating System :: Microsoft :: Windows",
33
+ "Programming Language :: Python :: 3",
34
+ "Programming Language :: Python :: 3.11",
35
+ "Programming Language :: Python :: 3.12",
36
+ "Programming Language :: Python :: 3.13",
37
+ "Topic :: System :: Systems Administration",
38
+ "Topic :: Utilities",
39
+ ]
40
+
41
+ # Runtime dependencies are intentionally minimal.
42
+ # Full dependency list will be added in v0.2.0.
43
+ dependencies = [
44
+ "mcp>=1.0.0",
45
+ ]
46
+
47
+ [project.optional-dependencies]
48
+ windows = [
49
+ "pywinpty>=2.0.0", # PTY support for terminal session persistence on Windows
50
+ ]
51
+
52
+ [project.scripts]
53
+ anchorlink = "anchorlink:main"
54
+
55
+ [project.urls]
56
+ Homepage = "https://github.com/quintessence-proof/anchorlink"
57
+ Issues = "https://github.com/quintessence-proof/anchorlink/issues"
58
+
59
+ [tool.hatch.build.targets.wheel]
60
+ packages = ["src/anchorlink"]
@@ -0,0 +1,23 @@
1
+ """
2
+ Anchorlink Local — a secure desktop link for Claude.
3
+
4
+ Provides filesystem operations, command execution, terminal session
5
+ persistence, file search, and process management as an MCP server
6
+ over stdio. Designed for use with Claude for macOS, Claude for Windows,
7
+ and any MCP-compatible Claude client.
8
+
9
+ Status: pre-release (namespace reservation). Full implementation in progress.
10
+ """
11
+
12
+ __version__ = "0.1.0"
13
+ __author__ = "Steven Quinn Singleton"
14
+ __license__ = "MIT"
15
+
16
+
17
+ def main() -> None:
18
+ """Entry point for `uvx anchorlink` and direct CLI invocation."""
19
+ print(
20
+ "Anchorlink Local v0.1.0\n"
21
+ "Full MCP server implementation is in progress.\n"
22
+ "See https://github.com/stevensingleton/anchorlink for updates."
23
+ )