fastmcp-edge-authz 0.0.1__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.
- fastmcp_edge_authz-0.0.1/.gitattributes +10 -0
- fastmcp_edge_authz-0.0.1/.github/workflows/publish.yml +42 -0
- fastmcp_edge_authz-0.0.1/.gitignore +24 -0
- fastmcp_edge_authz-0.0.1/LICENSE +21 -0
- fastmcp_edge_authz-0.0.1/PKG-INFO +41 -0
- fastmcp_edge_authz-0.0.1/README.md +27 -0
- fastmcp_edge_authz-0.0.1/fastmcp_edge_authz/__init__.py +4 -0
- fastmcp_edge_authz-0.0.1/pyproject.toml +37 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Store and check out text files as LF on every platform, overriding a local
|
|
2
|
+
# core.autocrlf=true that would otherwise produce phantom EOL-only diffs.
|
|
3
|
+
# text=auto leaves detected binaries untouched; eol=lf pins the *working tree*.
|
|
4
|
+
* text=auto eol=lf
|
|
5
|
+
|
|
6
|
+
# cmd.exe reads batch files by byte offset, so LF-only endings break labels
|
|
7
|
+
# and goto. Do NOT add *.ps1 here: PowerShell is cross-platform, and CRLF
|
|
8
|
+
# breaks the shebang of a .ps1 meant to run on Linux/macOS.
|
|
9
|
+
*.bat text eol=crlf
|
|
10
|
+
*.cmd text eol=crlf
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
on:
|
|
3
|
+
release:
|
|
4
|
+
types: [published]
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
pypi-publish:
|
|
9
|
+
name: Upload to PyPI
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write # For PyPI's trusted publishing
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout
|
|
15
|
+
uses: actions/checkout@v5
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
fetch-tags: true
|
|
19
|
+
|
|
20
|
+
- name: Install uv
|
|
21
|
+
uses: astral-sh/setup-uv@v6
|
|
22
|
+
|
|
23
|
+
- name: Build
|
|
24
|
+
run: uv build
|
|
25
|
+
|
|
26
|
+
- name: Check version format
|
|
27
|
+
run: |
|
|
28
|
+
# Extract version from the built package
|
|
29
|
+
VERSION=$(ls dist/*.whl | head -n1 | sed -E 's/.*-([0-9].*)-.*/\1/')
|
|
30
|
+
echo "Package version: $VERSION"
|
|
31
|
+
|
|
32
|
+
# Check if version contains dev/post markers (development version)
|
|
33
|
+
if [[ "$VERSION" =~ (dev|post.*dev) ]]; then
|
|
34
|
+
echo "❌ ERROR: Cannot publish development version: $VERSION"
|
|
35
|
+
echo "Please create a proper Git tag first (e.g., 'git tag v0.1.0')"
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
echo "✅ Version $VERSION is valid for publishing"
|
|
40
|
+
|
|
41
|
+
- name: Publish to PyPI
|
|
42
|
+
run: uv publish -v dist/*
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv/
|
|
11
|
+
|
|
12
|
+
# Log files
|
|
13
|
+
*.log
|
|
14
|
+
|
|
15
|
+
# Coverage reports
|
|
16
|
+
.coverage
|
|
17
|
+
htmlcov/
|
|
18
|
+
.pytest_cache/
|
|
19
|
+
|
|
20
|
+
# VSCode settings
|
|
21
|
+
.vscode/PythonImportHelper-v2-Completion.json
|
|
22
|
+
|
|
23
|
+
# Claude Code local settings (tool permissions, personal overrides — not shared)
|
|
24
|
+
.claude/settings.local.json
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Stephan Eberle
|
|
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,41 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: fastmcp-edge-authz
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Edge policy enforcement point for FastMCP servers: verifies end-user tokens and applies an allow/deny policy before calling upstreams with a service credential (planned; this release only reserves the name).
|
|
5
|
+
Project-URL: Homepage, https://github.com/stephaneberle9/fastmcp-edge-authz
|
|
6
|
+
Project-URL: Repository, https://github.com/stephaneberle9/fastmcp-edge-authz
|
|
7
|
+
Author-email: Stephan Eberle <stephaneberle9@gmail.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 1 - Planning
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Requires-Python: >=3.10
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
|
|
15
|
+
# fastmcp-edge-authz
|
|
16
|
+
|
|
17
|
+
> [!NOTE]
|
|
18
|
+
> Planned, not implemented. The releases published so far only reserve the
|
|
19
|
+
> package name on PyPI and contain no code.
|
|
20
|
+
|
|
21
|
+
`fastmcp-edge-authz` is meant to become the policy enforcement point for
|
|
22
|
+
[FastMCP](https://gofastmcp.com) servers that front an upstream API through one
|
|
23
|
+
shared service credential, so the upstream cannot tell end users apart. On
|
|
24
|
+
every request it will:
|
|
25
|
+
|
|
26
|
+
1. verify the end user's token from an external identity provider;
|
|
27
|
+
2. decide with a configurable allow/deny policy, either a local TOML allowlist
|
|
28
|
+
or a remote policy decision point;
|
|
29
|
+
3. write an audit entry naming the user and the decision;
|
|
30
|
+
4. drop the end-user identity and call the upstream with the service
|
|
31
|
+
credential.
|
|
32
|
+
|
|
33
|
+
The framework-neutral parts (principals, decisions, the versioned policy file
|
|
34
|
+
and the audit log) come from
|
|
35
|
+
[python-edge-authz](https://github.com/stephaneberle9/python-edge-authz). For a
|
|
36
|
+
server where each user brings their own upstream credential, see
|
|
37
|
+
[fastmcp-edge-byok](https://github.com/stephaneberle9/fastmcp-edge-byok).
|
|
38
|
+
|
|
39
|
+
## License
|
|
40
|
+
|
|
41
|
+
MIT
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# fastmcp-edge-authz
|
|
2
|
+
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> Planned, not implemented. The releases published so far only reserve the
|
|
5
|
+
> package name on PyPI and contain no code.
|
|
6
|
+
|
|
7
|
+
`fastmcp-edge-authz` is meant to become the policy enforcement point for
|
|
8
|
+
[FastMCP](https://gofastmcp.com) servers that front an upstream API through one
|
|
9
|
+
shared service credential, so the upstream cannot tell end users apart. On
|
|
10
|
+
every request it will:
|
|
11
|
+
|
|
12
|
+
1. verify the end user's token from an external identity provider;
|
|
13
|
+
2. decide with a configurable allow/deny policy, either a local TOML allowlist
|
|
14
|
+
or a remote policy decision point;
|
|
15
|
+
3. write an audit entry naming the user and the decision;
|
|
16
|
+
4. drop the end-user identity and call the upstream with the service
|
|
17
|
+
credential.
|
|
18
|
+
|
|
19
|
+
The framework-neutral parts (principals, decisions, the versioned policy file
|
|
20
|
+
and the audit log) come from
|
|
21
|
+
[python-edge-authz](https://github.com/stephaneberle9/python-edge-authz). For a
|
|
22
|
+
server where each user brings their own upstream credential, see
|
|
23
|
+
[fastmcp-edge-byok](https://github.com/stephaneberle9/fastmcp-edge-byok).
|
|
24
|
+
|
|
25
|
+
## License
|
|
26
|
+
|
|
27
|
+
MIT
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "fastmcp-edge-authz"
|
|
3
|
+
dynamic = ["version"]
|
|
4
|
+
description = "Edge policy enforcement point for FastMCP servers: verifies end-user tokens and applies an allow/deny policy before calling upstreams with a service credential (planned; this release only reserves the name)."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [
|
|
7
|
+
{ name = "Stephan Eberle", email = "stephaneberle9@gmail.com" }
|
|
8
|
+
]
|
|
9
|
+
license = "MIT"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
dependencies = []
|
|
12
|
+
classifiers = [
|
|
13
|
+
"Development Status :: 1 - Planning",
|
|
14
|
+
"Programming Language :: Python :: 3",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[project.urls]
|
|
18
|
+
Homepage = "https://github.com/stephaneberle9/fastmcp-edge-authz"
|
|
19
|
+
Repository = "https://github.com/stephaneberle9/fastmcp-edge-authz"
|
|
20
|
+
|
|
21
|
+
[build-system]
|
|
22
|
+
requires = ["hatchling", "uv-dynamic-versioning"]
|
|
23
|
+
build-backend = "hatchling.build"
|
|
24
|
+
|
|
25
|
+
[tool.uv-dynamic-versioning]
|
|
26
|
+
enable = true
|
|
27
|
+
vcs = "git"
|
|
28
|
+
style = "pep440"
|
|
29
|
+
|
|
30
|
+
[tool.hatch.version]
|
|
31
|
+
source = "uv-dynamic-versioning"
|
|
32
|
+
|
|
33
|
+
[tool.hatch.build.targets.wheel]
|
|
34
|
+
sources = ["src"]
|
|
35
|
+
|
|
36
|
+
[tool.hatch.build.targets.sdist]
|
|
37
|
+
sources = ["src"]
|