callrail-mcp 1.0.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.
- callrail_mcp-1.0.0/.github/CODEOWNERS +2 -0
- callrail_mcp-1.0.0/.github/FUNDING.yml +2 -0
- callrail_mcp-1.0.0/.github/ISSUE_TEMPLATE/bug_report.md +34 -0
- callrail_mcp-1.0.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
- callrail_mcp-1.0.0/.github/ISSUE_TEMPLATE/feature_request.md +31 -0
- callrail_mcp-1.0.0/.github/dependabot.yml +16 -0
- callrail_mcp-1.0.0/.github/pull_request_template.md +33 -0
- callrail_mcp-1.0.0/.github/workflows/ci.yml +39 -0
- callrail_mcp-1.0.0/.github/workflows/publish.yml +32 -0
- callrail_mcp-1.0.0/.gitignore +58 -0
- callrail_mcp-1.0.0/CHANGELOG.md +1174 -0
- callrail_mcp-1.0.0/CLAUDE.md +135 -0
- callrail_mcp-1.0.0/CODE_OF_CONDUCT.md +41 -0
- callrail_mcp-1.0.0/CONTRIBUTING.md +96 -0
- callrail_mcp-1.0.0/LICENSE +21 -0
- callrail_mcp-1.0.0/PKG-INFO +355 -0
- callrail_mcp-1.0.0/README.md +315 -0
- callrail_mcp-1.0.0/SECURITY.md +44 -0
- callrail_mcp-1.0.0/pyproject.toml +79 -0
- callrail_mcp-1.0.0/src/callrail_mcp/__init__.py +5 -0
- callrail_mcp-1.0.0/src/callrail_mcp/__main__.py +6 -0
- callrail_mcp-1.0.0/src/callrail_mcp/client.py +453 -0
- callrail_mcp-1.0.0/src/callrail_mcp/server.py +3634 -0
- callrail_mcp-1.0.0/tests/__init__.py +0 -0
- callrail_mcp-1.0.0/tests/test_client.py +434 -0
- callrail_mcp-1.0.0/tests/test_server.py +3288 -0
- callrail_mcp-1.0.0/tests/test_tracker_fuzz.py +173 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Something isn't working as documented
|
|
4
|
+
title: "[Bug] "
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
|
|
11
|
+
A clear and concise description of what the bug is.
|
|
12
|
+
|
|
13
|
+
## To reproduce
|
|
14
|
+
|
|
15
|
+
Minimal steps. If possible, paste the tool invocation or Python snippet.
|
|
16
|
+
|
|
17
|
+
## Expected behavior
|
|
18
|
+
|
|
19
|
+
What you thought would happen.
|
|
20
|
+
|
|
21
|
+
## Actual behavior
|
|
22
|
+
|
|
23
|
+
What actually happened. Include error output if any — **redact your API key**.
|
|
24
|
+
|
|
25
|
+
## Environment
|
|
26
|
+
|
|
27
|
+
- `callrail-mcp` version:
|
|
28
|
+
- Python version:
|
|
29
|
+
- MCP client (Claude Code / Desktop / Cursor / other) + version:
|
|
30
|
+
- OS:
|
|
31
|
+
|
|
32
|
+
## Additional context
|
|
33
|
+
|
|
34
|
+
Anything else relevant — related issues, docs you followed, etc.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security vulnerability
|
|
4
|
+
url: https://github.com/pghdma/callrail-mcp/security/policy
|
|
5
|
+
about: Please report security issues privately via SECURITY.md, not as a public issue.
|
|
6
|
+
- name: Questions & general discussion
|
|
7
|
+
url: https://github.com/pghdma/callrail-mcp/discussions
|
|
8
|
+
about: Ask questions or share how you're using the project.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest a new tool or capability
|
|
4
|
+
title: "[Feature] "
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Use case
|
|
10
|
+
|
|
11
|
+
What are you trying to do with your MCP client (Claude, Cursor, etc.)? Describe the real workflow — e.g. *"I want to ask Claude to list all missed calls from Google Ads that lasted under 10 seconds so we can flag ad-copy misfires."*
|
|
12
|
+
|
|
13
|
+
## Proposed tool / API surface
|
|
14
|
+
|
|
15
|
+
If you have a specific tool signature in mind, sketch it:
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
@mcp.tool()
|
|
19
|
+
def new_tool(arg: str, ...) -> str:
|
|
20
|
+
"""What it does."""
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Or describe the CallRail API endpoint you'd like wrapped (see <https://apidocs.callrail.com/>).
|
|
24
|
+
|
|
25
|
+
## Alternatives considered
|
|
26
|
+
|
|
27
|
+
What workarounds exist today? What's wrong with them?
|
|
28
|
+
|
|
29
|
+
## Additional context
|
|
30
|
+
|
|
31
|
+
Links, screenshots, related issues.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: pip
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
open-pull-requests-limit: 5
|
|
8
|
+
commit-message:
|
|
9
|
+
prefix: "chore(deps)"
|
|
10
|
+
|
|
11
|
+
- package-ecosystem: github-actions
|
|
12
|
+
directory: "/"
|
|
13
|
+
schedule:
|
|
14
|
+
interval: monthly
|
|
15
|
+
commit-message:
|
|
16
|
+
prefix: "chore(ci)"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Pull request
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
What does this PR change? Keep it tight — one-liner is best.
|
|
6
|
+
|
|
7
|
+
## Related issue(s)
|
|
8
|
+
|
|
9
|
+
Closes #
|
|
10
|
+
|
|
11
|
+
## Changes
|
|
12
|
+
|
|
13
|
+
- [ ] ...
|
|
14
|
+
- [ ] ...
|
|
15
|
+
|
|
16
|
+
## Test plan
|
|
17
|
+
|
|
18
|
+
How did you verify this works? Include commands if you ran them locally.
|
|
19
|
+
|
|
20
|
+
- [ ] `pytest` passes
|
|
21
|
+
- [ ] `ruff check src tests` passes
|
|
22
|
+
- [ ] Tested manually against a real CallRail account (if applicable)
|
|
23
|
+
|
|
24
|
+
## Checklist
|
|
25
|
+
|
|
26
|
+
- [ ] Docs updated (README / docstrings) if the change affects user-facing API
|
|
27
|
+
- [ ] `CHANGELOG.md` updated under `## [Unreleased]`
|
|
28
|
+
- [ ] No secrets, API keys, or PII committed
|
|
29
|
+
- [ ] Follows the code style enforced by `ruff`
|
|
30
|
+
|
|
31
|
+
## Screenshots / output (optional)
|
|
32
|
+
|
|
33
|
+
Paste any relevant output or screenshots.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v6
|
|
19
|
+
|
|
20
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
21
|
+
uses: actions/setup-python@v6
|
|
22
|
+
with:
|
|
23
|
+
python-version: ${{ matrix.python-version }}
|
|
24
|
+
cache: pip
|
|
25
|
+
|
|
26
|
+
- name: Install package + dev extras
|
|
27
|
+
run: |
|
|
28
|
+
python -m pip install --upgrade pip
|
|
29
|
+
pip install -e ".[dev]"
|
|
30
|
+
|
|
31
|
+
- name: Lint (ruff)
|
|
32
|
+
run: ruff check src tests
|
|
33
|
+
|
|
34
|
+
- name: Type check (mypy)
|
|
35
|
+
run: mypy src
|
|
36
|
+
continue-on-error: true # non-blocking initially; tighten later
|
|
37
|
+
|
|
38
|
+
- name: Run tests
|
|
39
|
+
run: pytest -v
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build-and-publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
environment:
|
|
12
|
+
name: pypi
|
|
13
|
+
url: https://pypi.org/p/callrail-mcp
|
|
14
|
+
permissions:
|
|
15
|
+
id-token: write # trusted publishing via OIDC
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v6
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
- name: Install build
|
|
25
|
+
run: |
|
|
26
|
+
python -m pip install --upgrade pip build
|
|
27
|
+
|
|
28
|
+
- name: Build sdist + wheel
|
|
29
|
+
run: python -m build
|
|
30
|
+
|
|
31
|
+
- name: Publish to PyPI
|
|
32
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
share/python-wheels/
|
|
20
|
+
*.egg-info/
|
|
21
|
+
.installed.cfg
|
|
22
|
+
*.egg
|
|
23
|
+
MANIFEST
|
|
24
|
+
|
|
25
|
+
# Virtual envs
|
|
26
|
+
.venv/
|
|
27
|
+
venv/
|
|
28
|
+
env/
|
|
29
|
+
ENV/
|
|
30
|
+
|
|
31
|
+
# Testing
|
|
32
|
+
.pytest_cache/
|
|
33
|
+
.coverage
|
|
34
|
+
.coverage.*
|
|
35
|
+
htmlcov/
|
|
36
|
+
.tox/
|
|
37
|
+
.nox/
|
|
38
|
+
coverage.xml
|
|
39
|
+
*.cover
|
|
40
|
+
|
|
41
|
+
# Mypy / Ruff caches
|
|
42
|
+
.mypy_cache/
|
|
43
|
+
.ruff_cache/
|
|
44
|
+
.dmypy.json
|
|
45
|
+
dmypy.json
|
|
46
|
+
|
|
47
|
+
# IDE
|
|
48
|
+
.vscode/
|
|
49
|
+
.idea/
|
|
50
|
+
*.swp
|
|
51
|
+
|
|
52
|
+
# OS
|
|
53
|
+
.DS_Store
|
|
54
|
+
|
|
55
|
+
# Secrets — never commit
|
|
56
|
+
.env
|
|
57
|
+
*.api-key
|
|
58
|
+
callrail-api-key.txt
|