This release is a pre-release and may not be stable for production use.
Stackless MCP
stackless-mcp is a local stdio MCP server for Claude Code, Codex, and other
terminal agents. It exposes Stackless app capabilities as MCP tools by calling a
deployed Stackless instance over /api/v1.
The MCP process is intentionally thin. It does not import middleware-service,
does not need Snowflake or dbt credentials, and does not read local app data.
Stackless remains the source of truth for auth, RBAC, ownership, and mutations.
Use this guide when connecting a terminal agent to your own Stackless instance
from the published stackless-mcp package. Development from a monorepo checkout
is covered separately at the end.
Prerequisite
Install uv. The agent configuration uses uvx, which is included with uv
and fetches the pinned stackless-mcp package on first run.
Install
Pin the beta version exactly in your agent configuration:
stackless-mcp==<version>. The MCP server also needs the base URL for your
Stackless instance.
Codex
Add this block to ~/.codex/config.toml:
[mcp_servers.stackless]
command = "uvx"
args = [
"stackless-mcp==<version>",
"--base-url",
"https://your-stackless-instance.example.com",
]
Claude Code
Add this block to .mcp.json:
{
"mcpServers": {
"stackless": {
"command": "uvx",
"args": [
"stackless-mcp==<version>",
"--base-url",
"https://your-stackless-instance.example.com"
]
}
}
}
Login
Run login once before starting Codex or Claude Code:
uvx stackless-mcp==<version> login \
--base-url https://your-stackless-instance.example.com
login opens the Stackless browser auth flow, receives a local callback from the
authenticated browser session, exchanges it for a scoped slmcp_ MCP session,
and stores that session locally. The server-side session defaults to a 30-day
TTL. Your Stackless instance can lower that lifetime with
MCP_SESSION_TTL_SECONDS.
Credentials are stored in the OS keyring by default. If keyring support is not available, use file storage:
uvx stackless-mcp==<version> login \
--base-url https://your-stackless-instance.example.com \
--auth-storage file
With --auth-storage file, credentials are stored as a 0600
credentials.json file in the platform user config directory for
stackless-mcp. If you use file storage for login, add
"--auth-storage", "file" to the agent configuration too.
Verify
uvx stackless-mcp==<version> --version
uvx stackless-mcp==<version> doctor \
--base-url https://your-stackless-instance.example.com
Run doctor first when setup does not work. It checks local configuration,
stored auth, Stackless API connectivity, and server capability discovery.
Example successful output:
{
"auth": {
"credential_present": true,
"expires_at": "2026-07-10T12:00:00Z",
"expiry_status": "unexpired",
"mode": "stored_token",
"storage_backend": "keyring",
"token_present": true,
"user_id": "user_123"
},
"auth_storage": "keyring",
"base_url": "https://your-stackless-instance.example.com",
"capabilities": {
"checked": true,
"client_known_unsupported_by_server": [],
"error": null,
"ok": true,
"server_supported_unknown_to_client": [],
"server_version": "2026.06.10"
},
"client_version": "<version>",
"connectivity": {
"checked": true,
"ok": true
},
"errors": [],
"ok": true,
"toolsets": [
"all"
]
}
doctor exits 0 when required checks pass and exits 1 for local
configuration, auth, or connectivity failures. Missing command arguments and
invalid CLI options exit 2.
Troubleshooting
- Missing base URL: pass
--base-url https://...in the agent config and login command, or setSTACKLESS_BASE_URL. - Expired or missing token: run
uvx stackless-mcp==<version> login --base-url https://your-stackless-instance.example.comagain. - Server capability delta:
doctorreports tools known by the client but not supported by the server underclient_known_unsupported_by_server. Upgrade the Stackless instance when you need those tools; otherwise the client simply advertises the supported subset. - Connectivity failure: confirm the base URL is reachable from your machine,
uses the correct scheme, and includes no
/api/v1suffix. - Keyring failure: rerun
loginand your agent command with--auth-storage file.
For a one-shot connectivity check without starting MCP stdio, run:
uvx stackless-mcp==<version> \
--base-url https://your-stackless-instance.example.com \
--check
--check uses the stored MCP session when present and exits. Expired sessions
prompt a fresh stackless-mcp login instead of failing with an opaque MCP
startup error.
Upgrade
Upgrade by changing the pinned package version in your Codex or Claude Code
configuration, then restart the agent. Pre-release versions follow PEP 440:
beta releases must be pinned exactly. For example, change
stackless-mcp==<old-version> to stackless-mcp==<new-version> when the new
beta is published.
Revoke or Reset Auth
uvx stackless-mcp==<version> logout \
--base-url https://your-stackless-instance.example.com
uvx stackless-mcp==<version> reset-auth \
--base-url https://your-stackless-instance.example.com
logout calls /mcp/auth/revoke and then deletes the local credential.
reset-auth only deletes the local credential, which is useful for stale or
corrupt local state; the server-side session remains valid until it is revoked
or expires.
To rotate a file-backed credential, run logout with --auth-storage file,
then run login --auth-storage file again. Delete any copied backups of the old
file credential as part of rotation.
Advanced: Toolsets
This is not part of basic setup. By default, the full supported tool set loads and the agent decides which tool to call at runtime. Tool selection is automatic and is not a setup choice.
Use --toolsets only when you intentionally want to reduce the loaded
tool-schema surface and agent context:
[mcp_servers.stackless]
command = "uvx"
args = [
"stackless-mcp==<version>",
"--base-url",
"https://your-stackless-instance.example.com",
"--toolsets",
"catalog,runs",
]
Valid toolsets are all, core, catalog, runs, transformations,
semantic, dashboards, lifecycle, fivetran, support, and monitors.
all is the default. Core tools for auth checks and operation status are always
registered; selecting core registers only those tools. Toolsets are a runtime
ergonomics feature, not a security boundary. Stackless backend RBAC and tool
permissions still enforce access.
Development
Use this path only when developing stackless-mcp from a monorepo checkout:
cd stackless-mcp
poetry install --with dev
poetry run stackless-mcp login \
--base-url https://your-stackless-instance.example.com
poetry run stackless-mcp \
--base-url https://your-stackless-instance.example.com
Manual token/cookie setup remains for development and compatibility only:
export STACKLESS_BASE_URL=https://your-stackless-instance.example.com
export STACKLESS_TOKEN='<valid Stackless/Cognito JWT or slmcp token>'
# or, for browser-cookie development auth:
# export STACKLESS_COOKIE='AWSALB=...; AWSELBAuthSessionCookie-0=...'
poetry run stackless-mcp
Tool Surface
Prefer these workflow-style tools for new agents:
| Tool | Description |
|---|---|
check_stackless_connection |
Check configured Stackless auth/API connectivity. |
list_support_tickets |
List support tickets for the current Stackless user. |
get_support_ticket_conversation |
Read the public conversation for one current-user support ticket. |
list_monitors |
List authorized Monitors without changing or running them. |
get_monitor |
Inspect a Monitor's safe published and draft state. |
get_monitor_authoring_options |
Discover authorized context and Slack/email authoring options. |
create_monitor_draft |
Create a private report-only draft with Slack/email delivery; never run or publish it. |
update_monitor_draft |
CAS-update a draft while preserving stored webhooks. |
rebase_monitor_draft |
Apply disjoint draft edits or return safe conflict fields. |
diagnose_monitor_dependencies |
Diagnose dependency drift and return an RBAC-scoped signed repair plan. |
repair_monitor_dependencies |
Apply a still-current explicit dependency repair to a draft only. |
find_relevant_data |
Rank explainable lexical matches after access filters; misses return a safe reason, visible inventory, permitted alternatives, and retry hint. |
explain_stackless_asset |
Explain one catalog asset, columns, and lineage handles. |
list_stackless_assets |
List visible catalog assets by type, domain, or tag. |
trace_stackless_lineage |
Trace upstream or downstream catalog lineage. |
get_stackless_column_details |
Get column metadata for a catalog asset. |
refresh_stackless_catalog |
Refresh the catalog snapshot in light or full mode. |
get_stackless_connector_status |
Get connector sync status from the catalog snapshot. |
get_stackless_asset_freshness |
Summarize upstream freshness for a catalog asset. |
list_stackless_snowflake_schemas |
List visible Snowflake schemas from the catalog. |
describe_snowflake_object |
Describe a visible Snowflake table or view with typed column metadata. |
validate_snowflake_access |
Check RBAC plus Snowflake metadata or zero-row object access. |
explain_schema_permissions |
Explain Stackless catalog/RBAC visibility for a Snowflake schema. |
query_snowflake |
Run direct read-only Snowflake SQL with Stackless guardrails. |
list_fivetran_connector_types |
List Fivetran connector types available for draft creation. |
get_fivetran_connector_config_requirements |
Inspect redacted non-secret config requirements for a Fivetran connector type. |
list_fivetran_connections |
List group-scoped Fivetran connections with compact operational status. |
get_fivetran_connection |
Get current Fivetran connection status and schedule. |
get_fivetran_connection_schema |
Read Fivetran schema and table sync configuration. |
get_fivetran_health_summary |
Summarize health across configured-group Fivetran connectors. |
create_fivetran_connection_draft |
Create a paused non-secret Fivetran connection draft and Connect Card setup link. |
reload_fivetran_connection_schema_config |
Reload Fivetran source schema metadata for a connection. |
pause_fivetran_connection |
Pause a Fivetran connection after explicit confirmation. |
resume_fivetran_connection |
Resume a Fivetran connection after explicit confirmation. |
test_fivetran_connection |
Run Fivetran setup tests for a connection. |
sync_fivetran_connection |
Trigger an immediate normal Fivetran sync after explicit confirmation. |
update_fivetran_connection_schedule |
Change Fivetran connection schedule fields after explicit confirmation. |
plan_fivetran_schema_change |
Dry-run exact Fivetran schema/table enable or disable changes. |
apply_fivetran_schema_change |
Apply a confirmed Fivetran schema/table enable or disable plan with plan-hash drift rejection. |
activate_fivetran_connector_for_agent_access |
Enable synced Fivetran destination schemas for Stackless agent access. |
list_stackless_runs |
List recent scheduler runs with stable run refs. |
diagnose_stackless_run |
Diagnose one run or job with redacted logs. |
get_stackless_run_logs |
Fetch filtered, redacted logs for a scheduler run. |
cancel_stackless_run |
Cancel a pending or running scheduler run. |
get_transformation_model |
Read a Transformation Model definition, spec (once, owner/admin only), relation, status, version, and ownership. |
fork_transformation_model |
Fork a published Transformation Model into a private draft and return a compact readback. |
update_transformation_model_draft |
Update a private Transformation Model draft and return a compact readback without the spec. |
draft_transformation_model |
Scaffold or create a Transformation Model draft; a created draft returns a compact readback. |
list_stackless_transformation_models |
List visible Transformation Models. |
get_stackless_transformation_model |
Read Transformation Model source-of-truth state from middleware. |
validate_transformation_model_draft |
Validate a Transformation Model draft. |
preview_transformation_model_draft |
Queue a guarded preview for a Transformation Model draft. |
draft_semantic_model |
Scaffold or create a Semantic Model draft. |
update_stackless_semantic_model |
Update a Semantic Model, forking published models into an editable draft. |
list_stackless_semantic_models |
List visible Semantic Models. |
explain_stackless_semantic_model |
Explain a Semantic Model and queryable members; include_full_sql=true also returns the complete SQL and sql_sha256, the hash of the returned text. Secret-like values are still redacted; sql_redacted: true means the SQL is not a byte-exact copy and must not be written back. |
validate_semantic_model_draft |
Validate a Semantic Model draft or payload. |
preview_semantic_model_query |
Run a guarded Semantic Model preview query. |
list_stackless_dashboards |
List visible Stackless dashboards. |
list_dashboard_export_schedules |
List export schedules for a visible dashboard. |
get_dashboard_export_schedule |
Read one dashboard export schedule and monitoring metadata. |
list_dashboard_export_schedule_runs |
List export runs for a dashboard export schedule. |
list_dashboard_export_eligible_recipients |
List users eligible to receive dashboard export schedules. |
create_dashboard_export_schedule |
Create a dashboard export schedule after explicit confirmation. |
update_dashboard_export_schedule |
Update a dashboard export schedule after explicit confirmation. |
pause_dashboard_export_schedule |
Pause a dashboard export schedule after explicit confirmation. |
resume_dashboard_export_schedule |
Resume a dashboard export schedule after explicit confirmation. |
unsuspend_dashboard_export_schedule |
Unsuspend a dashboard export schedule after explicit confirmation. |
test_send_dashboard_export_schedule |
Trigger a dashboard export test send after explicit confirmation. |
delete_dashboard_export_schedule |
Delete a dashboard export schedule after explicit confirmation. |
list_dashboard_members |
List Cube members available for custom dashboard widgets. |
get_stackless_dashboard |
Get a compact dashboard summary by default; request the full spec or selected widgets. |
diagnose_stackless_dashboard |
Diagnose custom dashboard widget hydration failures. |
describe_gooddata_dashboard |
Describe a visible legacy GoodData dashboard structure and dependencies. |
trace_gooddata_dashboard_metrics |
Trace legacy GoodData dashboard visualizations to metrics. |
validate_gooddata_filters |
Validate legacy GoodData dashboard filter references against the LDM. |
draft_dashboard_from_goal |
Scaffold or create a custom dashboard draft. |
clone_stackless_dashboard |
Clone a custom dashboard into an independent private draft. |
fork_stackless_dashboard |
Fork a published custom dashboard into a private draft. |
edit_stackless_dashboard_section |
Add, remove, or rename one tab/section on a private draft. |
edit_stackless_dashboard_section_widget |
Add or remove one widget from a draft tab/section. |
upsert_stackless_dashboard_widget |
Atomically add or replace one typed widget and optionally place it. |
patch_stackless_dashboard_layout |
Move or resize selected draft widgets with partial layout patches. |
update_stackless_dashboard_draft |
Update a private custom dashboard draft. |
hydrate_dashboard |
Hydrate persisted widgets with runtime filters/table overrides; dashboard spec fields are rejected. |
validate_dashboard_draft |
Validate a persisted or supplied candidate spec and report every violation, per widget, in one call. |
preview_dashboard |
Preview persisted widgets with runtime filters/table overrides; dashboard spec fields are rejected. |
diff_stackless_draft |
Inspect draft diff/review output and publish fingerprints before publication. |
publish_stackless_draft |
Publish a Stackless draft after confirmation and matching review context. |
estimate_stackless_refresh |
Prepare a refresh estimate before refreshing a published resource. |
refresh_stackless_resource |
Refresh a published Stackless resource after confirmation. |
unpublish_stackless_resource |
Unpublish a Stackless resource after confirmation. |
delete_stackless_draft |
Delete a draft resource after confirmation. |
get_stackless_operation |
Get status for an MCP operation ID. |
get_stackless_invocation |
Recover status for a tool/idempotency key. |
get_stackless_connector_status reads the Stackless catalog snapshot. The
fivetran toolset calls live Fivetran operational APIs through middleware
workflow handlers and keeps secret config values redacted.
For dashboard edits, start with get_stackless_dashboard for a compact summary
bounded below 20 KB with the current spec_revision. It includes widget IDs,
sections, layout, filter summaries, and query members when they fit. Larger
summaries explicitly list omitted details in summary_omitted_fields; null
structure fields mean omitted, not empty. Follow next_summary_offset by
passing summary_offset until it is null to discover every widget ID. Summary
pages are not writable specs. Use widget_ids or section_id to fetch complete
definitions for the widgets you will edit. widget_offset and widget_limit
page through full widget definitions (widget_offset is nonnegative and
widget_limit is 1 through 10); next_offset=null marks the last page. Choose
only one of widget IDs, section ID, or widget paging; summary paging cannot be
combined with these selectors or full reads. view="full" without selection
returns the complete replacement spec. Partial reads return spec=null and
spec_complete=false so they cannot be mistaken for replacement specs.
returned_size is the response size in UTF-8 bytes. The permission-filtered
workflow remains available on every read; its detailed authoring_guidance
appears with full reads. Fork published dashboards before editing, preserve
unrelated content, and obtain approval before publishing.
Guidance is advisory, not an access grant or a guarantee of model compliance.
Complete dashboard spec readbacks and save responses use redaction without size
cuts. spec_complete, truncated_fields, and redacted_fields identify the
completeness state; a spec with secret-looking keys or values that were replaced
by [redacted] is not complete. Use granular edits that do not resubmit redacted
fields. upsert_stackless_dashboard_widget replaces the entire widget and requires
complete, unredacted widget content. Both widget upserts and
update_stackless_dashboard_draft reject truncation and [redacted] markers.
Whole-spec replacement also refuses to remove stored widgets unless
the caller passes their exact IDs as remove_widget_ids or sets
allow_widget_removal=true.
Hosted MCP errors preserve the complete removed-ID and marker-path lists. After
these explicit refusals, correct the payload and retry with a new idempotency key.
Preview and hydration responses report each returned widget's real row_count
and truncated flag, plus truncated_fields and total/returned widget counts.
validate_dashboard_draft(dashboard_ref=..., spec=...) validates the supplied
candidate through the same member, layout, and query checks used by dashboard
writes, without saving it. Use this for read-only access or candidates you do not
want persisted; otherwise save directly because write tools run the same checks
and never persist an invalid spec. For a candidate, use the dashboard_ref of
the private draft or fork you will save to. Published refs use live models only
and cannot validate private draft members. Omitting spec validates the stored
spec; omitting dashboard_ref validates the candidate as the caller's own new
draft, so the caller's private draft models count. One call reports every
violation: validation.valid is false only when validation.errors is
non-empty, and each error or warning carries code, widget_id (null for
dashboard-wide issues) and message. Errors block a save; warnings (for
example a KPI that mixes models) do not. Validation can execute Cube
queries but does not persist dashboard changes. Hydration always reads the stored
spec and rejects authoring fields inside its runtime request.
Mutating tools require an idempotency_key. Publish, refresh, unpublish,
cancel, delete, guarded Fivetran operations, and dashboard export schedule
mutations also require
confirmation={"confirmed": true, "evidence": "..."}.
For dashboard drafts, first call diff_stackless_draft("dashboard:<id>"), using
its optional request argument for non-default preview filters or table
overrides, and pass the returned review object as
publish_context={"review": review} to publish_stackless_draft. Stackless
rejects stale dashboard fingerprints if the draft changes between review and
publish.
For Semantic Model drafts, first call diff_stackless_draft("semantic_model:<id>")
and pass the returned review object as publish_context={"review": review}.
Use the returned confirmation_phrase as confirmation evidence; Stackless
rejects stale semantic-model fingerprints if the draft changes between review
and publish.
For draft_transformation_model, an idempotency_key is required only when a
spec is supplied and a draft is created.
Managed Transformation Workflow
For managed Transformation Models, use middleware-backed tools for lifecycle state and catalog-backed tools for discoverability:
- Create or update a draft with
draft_transformation_model. - Validate and preview it with
validate_transformation_model_draftandpreview_transformation_model_draft, polling returned operations withget_stackless_operation. - Review the publish diff with
diff_stackless_draft, then publish withpublish_stackless_draftand explicit confirmation. - Verify middleware source-of-truth state with
get_stackless_transformation_model. This is the tool for published version, materialization, identity, incremental config, relation metadata, refresh policy, and timestamps. - Use
explain_stackless_assetafter catalog refresh when you need catalog visibility, lineage, columns, or downstream dependency context. - Estimate refresh scope first with
estimate_stackless_refresh. Use the returned refresh estimate, fingerprint, confirmation requirement, and operation ref before queueing a refresh. - Queue the refresh with
refresh_stackless_resource, passing the estimate identifiers, explicit confirmation, and anidempotency_key. Poll the returned operation ref and usediagnose_stackless_runfor run details.
Safe Transformation Model fix flow:
- Call
get_stackless_transformation_model("transformation_model:<published-id>")orget_transformation_model("transformation_model:<published-id>")and inspect the full spec, published relation, status, version, and ownership metadata. - Call
fork_transformation_model("transformation_model:<published-id>", idempotency_key="...")and use the returneddata.draft.refs.draft_ref. - Call
update_transformation_model_draft(draft_ref, idempotency_key="...", spec=..., title=..., description=..., refresh_policy=...). Write tools return a compactdata.draft: refs, status, version,draft_spec_hash(the value preview and publish review check), the contract,preflight_warnings, andnormalized_changesfor anything the server defaulted or rewrote. They do not echo the spec; passinclude_spec=trueto get the normalized spec once. - Read back with
get_stackless_transformation_model(draft_ref)orget_transformation_model(draft_ref), then runvalidate_transformation_model_draft(draft_ref)andpreview_transformation_model_draft(draft_ref, idempotency_key="..."). - Call
diff_stackless_draft(draft_ref)and pass the reviewed publish context topublish_stackless_draftwith explicit confirmation evidence.
Endpoint-shaped compatibility tools are no longer registered. Use the workflow-style tools above for all new MCP agent flows.
Safety annotations
Every registered tool has explicit MCP safety hints from the shared policy. See SAFETY.md for classification rationale, registration checks, and contract-generation instructions. Annotations inform approval; backend authorization and confirmation requirements still apply.
Operation polling details
get_stackless_operation(operation_id) returns compact preview/lifecycle results.
Preview results include dbt PASS/WARN/ERROR/SKIP/TOTAL counts, failing node lines,
exit code/duration, preview hashes/relation, sample row count, column names, and up
to three sample rows. Counts are null when dbt did not emit a summary. When present,
they also include the estimate-mode cost_estimate, a bounded
union_diagnostics summary, and the scaffolded Semantic Model draft
(cube_draft_id/cube_draft_name). Publish results include
materialization_status and last_materialization_error, because a publish can
succeed while its materialization is queued or failed.
Request include=["sample_rows", "compiled_sql", "logs", "generated_files"] for
additional details, each returned once. Sample rows and long details remain
bounded; truncated_fields identifies cuts and compiled_sql_truncated includes
the MCP SQL limit. Logs omit the project-parse preamble and retain the tail and
dbt outcome lines. Model definitions/specs are fetched with
get_transformation_model, rather than echoed by operation polling. The webapp
preview-events API retains its existing payload.
diff_stackless_draft(include_preview=False) returns transformation preview
references, fingerprints, dbt counts/failing nodes, union branch row counts and
type/null warnings, and the sample and column counts without sample rows, column
names, or raw logs. True includes column names, up to three rows, and a bounded
log tail without project-parse warnings.
Both modes preserve the identical publish handoff. When the caller started the
preview through MCP, a details_request points to operation polling for further
details; previews from the webapp, the in-app agent, or another user carry a
details_hint instead. For Dashboards the flag controls widget hydration;
Semantic Model reviews are unchanged.
Metadata
Release files for stackless-mcp 1.0.0b8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| stackless_mcp-1.0.0b8.tar.gz | 46.6 kB | With provenance | Details for stackless_mcp-1.0.0b8.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| stackless_mcp-1.0.0b8-py3-none-any.whl | Python 3 | none | any | Details for stackless_mcp-1.0.0b8-py3-none-any.whl |
Total release size: 88.9 kB
Release files / stackless_mcp-1.0.0b8.tar.gz
| Download URL | stackless_mcp-1.0.0b8.tar.gz |
|---|---|
| Size | 46.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e4b77fe90f421685f969028b481e99273e2495b2bec49a5dc5ba3e35ee4c4b0c
|
|
BLAKE2b-256 checksum How to use checksums |
aacd994effc2f733c6d6ca08955fd46d355f0959447a0fbe23346d37fec03134
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency logRelease files / stackless_mcp-1.0.0b8-py3-none-any.whl
| Download URL | stackless_mcp-1.0.0b8-py3-none-any.whl |
|---|---|
| Size | 42.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6a922a6503ac0512ba7ec3134608b81a4ada6b274376da150dbcbfaad120e2c2
|
|
BLAKE2b-256 checksum How to use checksums |
3a97c84f367b9e05668af0ba8f20a5a84c5228fabc5f2501dae088641f7b0524
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency logSecurity for stackless-mcp 1.0.0b8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for stackless_mcp-1.0.0b8.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.