postman-mcp 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.
Files changed (122) hide show
  1. postman_mcp-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +104 -0
  2. postman_mcp-0.1.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
  3. postman_mcp-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +56 -0
  4. postman_mcp-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +40 -0
  5. postman_mcp-0.1.0/.github/dependabot.yml +16 -0
  6. postman_mcp-0.1.0/.github/workflows/ci.yml +70 -0
  7. postman_mcp-0.1.0/.github/workflows/docs.yml +47 -0
  8. postman_mcp-0.1.0/.github/workflows/release.yml +47 -0
  9. postman_mcp-0.1.0/.gitignore +39 -0
  10. postman_mcp-0.1.0/CHANGELOG.md +45 -0
  11. postman_mcp-0.1.0/CODE_OF_CONDUCT.md +73 -0
  12. postman_mcp-0.1.0/CONTRIBUTING.md +81 -0
  13. postman_mcp-0.1.0/LICENSE +21 -0
  14. postman_mcp-0.1.0/PKG-INFO +254 -0
  15. postman_mcp-0.1.0/README.md +210 -0
  16. postman_mcp-0.1.0/ROADMAP.md +66 -0
  17. postman_mcp-0.1.0/SECURITY.md +50 -0
  18. postman_mcp-0.1.0/SUPPORTED_VERSIONS.md +36 -0
  19. postman_mcp-0.1.0/assets/README.md +84 -0
  20. postman_mcp-0.1.0/assets/banner/banner.svg +21 -0
  21. postman_mcp-0.1.0/assets/launch/LAUNCH.md +145 -0
  22. postman_mcp-0.1.0/assets/logo/logo.svg +6 -0
  23. postman_mcp-0.1.0/docs/architecture/diff-engine.md +55 -0
  24. postman_mcp-0.1.0/docs/architecture/engine.md +68 -0
  25. postman_mcp-0.1.0/docs/architecture/merge-engine.md +65 -0
  26. postman_mcp-0.1.0/docs/architecture/overview.md +73 -0
  27. postman_mcp-0.1.0/docs/architecture/resolver.md +82 -0
  28. postman_mcp-0.1.0/docs/assets/favicon.svg +4 -0
  29. postman_mcp-0.1.0/docs/assets/logo.svg +6 -0
  30. postman_mcp-0.1.0/docs/commands/createenv.md +40 -0
  31. postman_mcp-0.1.0/docs/commands/index.md +50 -0
  32. postman_mcp-0.1.0/docs/commands/status.md +39 -0
  33. postman_mcp-0.1.0/docs/commands/sync.md +44 -0
  34. postman_mcp-0.1.0/docs/commands/syncall.md +43 -0
  35. postman_mcp-0.1.0/docs/commands/syncapi.md +65 -0
  36. postman_mcp-0.1.0/docs/commands/syncchanges.md +53 -0
  37. postman_mcp-0.1.0/docs/development/contributing.md +60 -0
  38. postman_mcp-0.1.0/docs/development/release-process.md +56 -0
  39. postman_mcp-0.1.0/docs/frameworks/django.md +39 -0
  40. postman_mcp-0.1.0/docs/frameworks/express.md +40 -0
  41. postman_mcp-0.1.0/docs/frameworks/fastapi.md +51 -0
  42. postman_mcp-0.1.0/docs/frameworks/nestjs.md +36 -0
  43. postman_mcp-0.1.0/docs/getting-started/configuration.md +76 -0
  44. postman_mcp-0.1.0/docs/getting-started/installation.md +68 -0
  45. postman_mcp-0.1.0/docs/getting-started/quickstart.md +85 -0
  46. postman_mcp-0.1.0/docs/index.md +78 -0
  47. postman_mcp-0.1.0/docs/roadmap.md +35 -0
  48. postman_mcp-0.1.0/examples/README.md +33 -0
  49. postman_mcp-0.1.0/examples/django-rest-framework/README.md +39 -0
  50. postman_mcp-0.1.0/examples/django-rest-framework/views.py +45 -0
  51. postman_mcp-0.1.0/examples/express-api/README.md +39 -0
  52. postman_mcp-0.1.0/examples/express-api/app.js +55 -0
  53. postman_mcp-0.1.0/examples/express-api/package.json +13 -0
  54. postman_mcp-0.1.0/examples/fastapi-basic/README.md +54 -0
  55. postman_mcp-0.1.0/examples/fastapi-basic/app.py +78 -0
  56. postman_mcp-0.1.0/examples/fastapi-basic/expected-output/post-payments.item.json +59 -0
  57. postman_mcp-0.1.0/examples/fastapi-basic/requirements.txt +3 -0
  58. postman_mcp-0.1.0/examples/fastapi-openapi/README.md +52 -0
  59. postman_mcp-0.1.0/examples/fastapi-openapi/app.py +77 -0
  60. postman_mcp-0.1.0/examples/fastapi-openapi/requirements.txt +3 -0
  61. postman_mcp-0.1.0/examples/nestjs-api/README.md +38 -0
  62. postman_mcp-0.1.0/examples/nestjs-api/payments.controller.ts +47 -0
  63. postman_mcp-0.1.0/mkdocs.yml +115 -0
  64. postman_mcp-0.1.0/postman_mcp/__init__.py +8 -0
  65. postman_mcp-0.1.0/postman_mcp/cli.py +323 -0
  66. postman_mcp-0.1.0/postman_mcp/commands/createenv.md +17 -0
  67. postman_mcp-0.1.0/postman_mcp/commands/status.md +14 -0
  68. postman_mcp-0.1.0/postman_mcp/commands/sync.md +17 -0
  69. postman_mcp-0.1.0/postman_mcp/commands/syncall.md +17 -0
  70. postman_mcp-0.1.0/postman_mcp/commands/syncapi.md +21 -0
  71. postman_mcp-0.1.0/postman_mcp/commands/syncchanges.md +19 -0
  72. postman_mcp-0.1.0/postman_mcp/config/__init__.py +21 -0
  73. postman_mcp-0.1.0/postman_mcp/config/store.py +84 -0
  74. postman_mcp-0.1.0/postman_mcp/diff/__init__.py +5 -0
  75. postman_mcp-0.1.0/postman_mcp/diff/render.py +88 -0
  76. postman_mcp-0.1.0/postman_mcp/engine/__init__.py +5 -0
  77. postman_mcp-0.1.0/postman_mcp/engine/builder.py +202 -0
  78. postman_mcp-0.1.0/postman_mcp/engine/examples.py +82 -0
  79. postman_mcp-0.1.0/postman_mcp/engine/tests.py +77 -0
  80. postman_mcp-0.1.0/postman_mcp/git/__init__.py +10 -0
  81. postman_mcp-0.1.0/postman_mcp/git/reader.py +83 -0
  82. postman_mcp-0.1.0/postman_mcp/input/__init__.py +15 -0
  83. postman_mcp-0.1.0/postman_mcp/input/detect.py +113 -0
  84. postman_mcp-0.1.0/postman_mcp/input/openapi.py +275 -0
  85. postman_mcp-0.1.0/postman_mcp/input/parsers/__init__.py +38 -0
  86. postman_mcp-0.1.0/postman_mcp/input/parsers/base.py +67 -0
  87. postman_mcp-0.1.0/postman_mcp/input/parsers/django.py +162 -0
  88. postman_mcp-0.1.0/postman_mcp/input/parsers/express.py +89 -0
  89. postman_mcp-0.1.0/postman_mcp/input/parsers/fastapi.py +216 -0
  90. postman_mcp-0.1.0/postman_mcp/input/parsers/nestjs.py +99 -0
  91. postman_mcp-0.1.0/postman_mcp/input/resolver.py +144 -0
  92. postman_mcp-0.1.0/postman_mcp/models.py +172 -0
  93. postman_mcp-0.1.0/postman_mcp/postman/__init__.py +5 -0
  94. postman_mcp-0.1.0/postman_mcp/postman/client.py +152 -0
  95. postman_mcp-0.1.0/postman_mcp/postman/merge.py +264 -0
  96. postman_mcp-0.1.0/postman_mcp/secrets/__init__.py +17 -0
  97. postman_mcp-0.1.0/postman_mcp/secrets/manager.py +86 -0
  98. postman_mcp-0.1.0/postman_mcp/server.py +100 -0
  99. postman_mcp-0.1.0/postman_mcp/service/__init__.py +4 -0
  100. postman_mcp-0.1.0/postman_mcp/service/context.py +45 -0
  101. postman_mcp-0.1.0/postman_mcp/service/environment.py +86 -0
  102. postman_mcp-0.1.0/postman_mcp/service/status.py +71 -0
  103. postman_mcp-0.1.0/postman_mcp/service/sync.py +276 -0
  104. postman_mcp-0.1.0/postman_mcp/setup/__init__.py +26 -0
  105. postman_mcp-0.1.0/postman_mcp/setup/installer.py +40 -0
  106. postman_mcp-0.1.0/postman_mcp/setup/registration.py +81 -0
  107. postman_mcp-0.1.0/pyproject.toml +75 -0
  108. postman_mcp-0.1.0/tests/conftest.py +136 -0
  109. postman_mcp-0.1.0/tests/test_cli.py +68 -0
  110. postman_mcp-0.1.0/tests/test_client.py +71 -0
  111. postman_mcp-0.1.0/tests/test_engine.py +101 -0
  112. postman_mcp-0.1.0/tests/test_git.py +66 -0
  113. postman_mcp-0.1.0/tests/test_merge.py +116 -0
  114. postman_mcp-0.1.0/tests/test_models_config_secrets.py +118 -0
  115. postman_mcp-0.1.0/tests/test_openapi.py +71 -0
  116. postman_mcp-0.1.0/tests/test_parsers.py +136 -0
  117. postman_mcp-0.1.0/tests/test_parsers_ts.py +128 -0
  118. postman_mcp-0.1.0/tests/test_resolver_and_diff.py +139 -0
  119. postman_mcp-0.1.0/tests/test_service.py +166 -0
  120. postman_mcp-0.1.0/tests/test_setup.py +66 -0
  121. postman_mcp-0.1.0/tests/test_status_and_env.py +101 -0
  122. postman_mcp-0.1.0/tests/test_test_scripts.py +63 -0
@@ -0,0 +1,104 @@
1
+ name: 🐛 Bug report
2
+ description: Something isn't working the way it should
3
+ title: "[Bug]: "
4
+ labels: ["bug", "triage"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for taking the time to file a bug report. The more precise you are, the
10
+ faster we can fix it. Please **do not** include your Postman API key or any
11
+ secret in this report.
12
+
13
+ - type: textarea
14
+ id: what-happened
15
+ attributes:
16
+ label: What happened?
17
+ description: A clear description of the bug, and what you expected instead.
18
+ placeholder: When I ran `/postman:syncapi createPayment`, the body was empty, but I expected...
19
+ validations:
20
+ required: true
21
+
22
+ - type: textarea
23
+ id: repro
24
+ attributes:
25
+ label: Steps to reproduce
26
+ description: Exact commands, in order. Include the framework and how the route is defined.
27
+ placeholder: |
28
+ 1. `postman-mcp init` with framework = fastapi
29
+ 2. In Claude Code, run `/postman:syncapi createPayment`
30
+ 3. See the diff is missing the request body
31
+ validations:
32
+ required: true
33
+
34
+ - type: dropdown
35
+ id: command
36
+ attributes:
37
+ label: Which command?
38
+ options:
39
+ - "postman-mcp init"
40
+ - "postman-mcp doctor"
41
+ - "postman-mcp serve"
42
+ - "/postman:syncapi"
43
+ - "/postman:syncchanges"
44
+ - "/postman:sync"
45
+ - "/postman:syncall"
46
+ - "/postman:createenv"
47
+ - "/postman:status"
48
+ - "Other / not sure"
49
+ validations:
50
+ required: true
51
+
52
+ - type: dropdown
53
+ id: framework
54
+ attributes:
55
+ label: Framework
56
+ options:
57
+ - FastAPI
58
+ - Express
59
+ - Django REST Framework
60
+ - NestJS
61
+ - Other / N/A
62
+ validations:
63
+ required: true
64
+
65
+ - type: dropdown
66
+ id: input-mode
67
+ attributes:
68
+ label: Input mode
69
+ description: From your `postman-mcp.json` → `config.inputMode`.
70
+ options:
71
+ - openapi
72
+ - code
73
+ - not sure
74
+ validations:
75
+ required: true
76
+
77
+ - type: textarea
78
+ id: env
79
+ attributes:
80
+ label: Environment
81
+ description: Output of `postman-mcp version` plus your OS and Python version.
82
+ placeholder: |
83
+ postman-mcp 0.1.0
84
+ Windows 11 / Python 3.12.3
85
+ render: shell
86
+ validations:
87
+ required: true
88
+
89
+ - type: textarea
90
+ id: logs
91
+ attributes:
92
+ label: Relevant output
93
+ description: Error messages, diff output, or `postman-mcp doctor` results. Redact any secrets.
94
+ render: shell
95
+
96
+ - type: checkboxes
97
+ id: checks
98
+ attributes:
99
+ label: Confirmations
100
+ options:
101
+ - label: I have removed any API keys or secrets from this report.
102
+ required: true
103
+ - label: I searched existing issues and this is not a duplicate.
104
+ required: true
@@ -0,0 +1,11 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 💬 Questions & discussion
4
+ url: https://github.com/logesh-works/postman-mcp/discussions
5
+ about: Ask a question, share how you use Postman MCP, or propose an idea before filing an issue.
6
+ - name: 🔒 Report a security vulnerability
7
+ url: https://github.com/logesh-works/postman-mcp/security/advisories/new
8
+ about: Please report security issues privately — do not open a public issue.
9
+ - name: 📖 Documentation
10
+ url: https://logesh-works.github.io/postman-mcp/
11
+ about: Installation, commands, configuration, and architecture guides.
@@ -0,0 +1,56 @@
1
+ name: ✨ Feature request
2
+ description: Suggest an idea or improvement
3
+ title: "[Feature]: "
4
+ labels: ["enhancement", "triage"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for the idea! Please check the [ROADMAP](../blob/main/ROADMAP.md) first —
10
+ your request may already be planned.
11
+
12
+ - type: textarea
13
+ id: problem
14
+ attributes:
15
+ label: What problem does this solve?
16
+ description: Describe the pain point. Start from the user's situation, not the solution.
17
+ placeholder: When I add a route in a Django `DefaultRouter`, `syncall` misses it because...
18
+ validations:
19
+ required: true
20
+
21
+ - type: textarea
22
+ id: proposal
23
+ attributes:
24
+ label: Proposed solution
25
+ description: What would you like to happen? A command, flag, or behavior change.
26
+ validations:
27
+ required: true
28
+
29
+ - type: textarea
30
+ id: alternatives
31
+ attributes:
32
+ label: Alternatives considered
33
+ description: Other approaches you thought about, and why they fall short.
34
+
35
+ - type: dropdown
36
+ id: area
37
+ attributes:
38
+ label: Area
39
+ options:
40
+ - Engine (request building)
41
+ - Input resolver / OpenAPI
42
+ - Framework parser
43
+ - Commands / CLI
44
+ - Postman client / merge
45
+ - Setup (init / doctor / registration)
46
+ - Docs
47
+ - Other
48
+ validations:
49
+ required: true
50
+
51
+ - type: checkboxes
52
+ id: contribute
53
+ attributes:
54
+ label: Contribution
55
+ options:
56
+ - label: I'm willing to open a pull request for this.
@@ -0,0 +1,40 @@
1
+ <!--
2
+ Thanks for contributing! Keep PRs focused on one logical change.
3
+ See CONTRIBUTING.md for the full guidelines.
4
+ -->
5
+
6
+ ## Summary
7
+
8
+ <!-- What does this PR do, and why? One or two sentences. -->
9
+
10
+ Fixes #<!-- issue number, if any -->
11
+
12
+ ## Type of change
13
+
14
+ - [ ] 🐛 Bug fix (non-breaking change that fixes an issue)
15
+ - [ ] ✨ New feature (non-breaking change that adds functionality)
16
+ - [ ] 💥 Breaking change (fix or feature that changes existing behavior)
17
+ - [ ] 📖 Documentation only
18
+ - [ ] 🧹 Refactor / internal (no user-facing change)
19
+ - [ ] 🧪 Tests only
20
+
21
+ ## What changed
22
+
23
+ <!-- Bullet the concrete changes. Reference relevant files where helpful. -->
24
+
25
+ -
26
+
27
+ ## How was this tested?
28
+
29
+ <!-- Commands you ran, new tests added, manual verification steps. -->
30
+
31
+ - [ ] `pytest` passes locally
32
+ - [ ] Added/updated tests for the changed behavior
33
+
34
+ ## Checklist
35
+
36
+ - [ ] My change matches the surrounding code style
37
+ - [ ] I updated the docs (`docs/`) if I changed a command, flag, or config field
38
+ - [ ] I added an entry under `## [Unreleased]` in `CHANGELOG.md`
39
+ - [ ] No secrets, API keys, or populated `postman-mcp.json` are included
40
+ - [ ] CI is green
@@ -0,0 +1,16 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+ groups:
8
+ python-deps:
9
+ patterns: ["*"]
10
+ labels: ["dependencies"]
11
+
12
+ - package-ecosystem: github-actions
13
+ directory: "/"
14
+ schedule:
15
+ interval: weekly
16
+ labels: ["dependencies", "ci"]
@@ -0,0 +1,70 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ concurrency:
13
+ group: ci-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ test:
18
+ name: test (py${{ matrix.python-version }} · ${{ matrix.os }})
19
+ runs-on: ${{ matrix.os }}
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ os: [ubuntu-latest, macos-latest, windows-latest]
24
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+
28
+ - name: Set up Python ${{ matrix.python-version }}
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: ${{ matrix.python-version }}
32
+ cache: pip
33
+
34
+ - name: Install
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ pip install -e ".[dev]"
38
+
39
+ - name: Run tests
40
+ run: pytest --cov --cov-report=xml --cov-report=term-missing
41
+
42
+ - name: Upload coverage to Codecov
43
+ if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12'
44
+ uses: codecov/codecov-action@v4
45
+ with:
46
+ files: coverage.xml
47
+ fail_ci_if_error: false
48
+ env:
49
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
50
+
51
+ build:
52
+ name: build (sdist + wheel)
53
+ runs-on: ubuntu-latest
54
+ steps:
55
+ - uses: actions/checkout@v4
56
+ - uses: actions/setup-python@v5
57
+ with:
58
+ python-version: "3.12"
59
+ - name: Build
60
+ run: |
61
+ python -m pip install --upgrade pip build
62
+ python -m build
63
+ - name: Check metadata
64
+ run: |
65
+ pip install twine
66
+ twine check dist/*
67
+ - uses: actions/upload-artifact@v4
68
+ with:
69
+ name: dist
70
+ path: dist/
@@ -0,0 +1,47 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - "docs/**"
8
+ - "mkdocs.yml"
9
+ - ".github/workflows/docs.yml"
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+ pages: write
15
+ id-token: write
16
+
17
+ concurrency:
18
+ group: pages
19
+ cancel-in-progress: false
20
+
21
+ jobs:
22
+ build:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ - uses: actions/setup-python@v5
27
+ with:
28
+ python-version: "3.12"
29
+ cache: pip
30
+ - name: Install docs dependencies
31
+ run: pip install -e ".[docs]"
32
+ - name: Build site
33
+ run: mkdocs build --strict
34
+ - uses: actions/upload-pages-artifact@v3
35
+ with:
36
+ path: site
37
+
38
+ deploy:
39
+ needs: build
40
+ runs-on: ubuntu-latest
41
+ environment:
42
+ name: github-pages
43
+ url: ${{ steps.deployment.outputs.page_url }}
44
+ steps:
45
+ - name: Deploy to GitHub Pages
46
+ id: deployment
47
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,47 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ build:
12
+ name: Build distribution
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: "3.12"
19
+ - name: Build sdist and wheel
20
+ run: |
21
+ python -m pip install --upgrade pip build
22
+ python -m build
23
+ - name: Check metadata
24
+ run: |
25
+ pip install twine
26
+ twine check dist/*
27
+ - uses: actions/upload-artifact@v4
28
+ with:
29
+ name: dist
30
+ path: dist/
31
+
32
+ publish:
33
+ name: Publish to PyPI
34
+ needs: build
35
+ runs-on: ubuntu-latest
36
+ environment:
37
+ name: pypi
38
+ url: https://pypi.org/project/postman-mcp/
39
+ permissions:
40
+ id-token: write # OIDC trusted publishing — no API token stored in the repo
41
+ steps:
42
+ - uses: actions/download-artifact@v4
43
+ with:
44
+ name: dist
45
+ path: dist/
46
+ - name: Publish
47
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,39 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+ .venv/
9
+ venv/
10
+ *.spec
11
+ .env
12
+ .env.*
13
+
14
+ # Node (examples/express-api, examples/nestjs-api)
15
+ node_modules/
16
+
17
+ # Test / coverage
18
+ .pytest_cache/
19
+ .coverage
20
+ .coverage.*
21
+ htmlcov/
22
+ coverage.xml
23
+ .tox/
24
+ .mypy_cache/
25
+ .ruff_cache/
26
+
27
+ # MkDocs build output (the docs/ *source* is tracked; only the built site is ignored)
28
+ site/
29
+
30
+ # postman-mcp runtime artifacts (also added by `init`)
31
+ .postman-mcp.secret
32
+ postman-mcp.json
33
+
34
+ # OS / editor
35
+ .DS_Store
36
+ Thumbs.db
37
+ .idea/
38
+ .vscode/
39
+ *.swp
@@ -0,0 +1,45 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+ - Open-source repository foundation: `LICENSE`, `CONTRIBUTING`, `CODE_OF_CONDUCT`,
12
+ `SECURITY`, `SUPPORTED_VERSIONS`, `ROADMAP`, GitHub issue/PR templates, CI and release
13
+ workflows, MkDocs Material documentation site, and `examples/`.
14
+ - **Test suite** under `tests/` — 120 tests, 83% coverage, all Postman REST calls mocked
15
+ with `respx`. Covers the engine, OpenAPI mapper, all four code parsers, merge
16
+ idempotency/preservation, the diff renderer, the two-phase confirm contract end to end,
17
+ the Postman client (auth/retry), setup install/registration, and the CLI `doctor`.
18
+
19
+ ## [0.1.0] — Unreleased (MVP)
20
+
21
+ First MVP release.
22
+
23
+ ### Added
24
+ - **Setup chain** — `postman-mcp init` (API-key handshake, workspace/collection pick,
25
+ config write, MCP-server registration, slash-command install), `postman-mcp doctor`,
26
+ `postman-mcp serve`, `postman-mcp version`.
27
+ - **The engine** — `RouteModel` → Postman Collection v2.1 item: method/URL, params,
28
+ request body with realistic examples, auth headers, success + error responses, and a
29
+ three-tier test scaffold (status + schema shipped; business-logic gated off).
30
+ - **Input resolution** — OpenAPI-first (one mapper for FastAPI / NestJS / DRF), with
31
+ framework code-parsing fallback (FastAPI, Express, Django REST Framework, NestJS) and
32
+ per-route mixing.
33
+ - **Commands** — `/postman:syncapi`, `/postman:syncchanges`, `/postman:sync`,
34
+ `/postman:syncall`, `/postman:createenv`, `/postman:status`.
35
+ - **Safety** — diff before every write, human-owned scripts/examples preserved across
36
+ syncs, soft deletes by default, secrets stored by reference only.
37
+
38
+ ### Known gaps
39
+ - A live end-to-end run against a real Postman workspace is still pending (tests mock the
40
+ REST API) — a release gate for `0.1.0`. See [ROADMAP.md](ROADMAP.md).
41
+ - TS parsers (Express/NestJS) are heuristic; Django router-registered viewsets are not
42
+ yet fully resolved.
43
+
44
+ [Unreleased]: https://github.com/logesh-works/postman-mcp/compare/v0.1.0...HEAD
45
+ [0.1.0]: https://github.com/logesh-works/postman-mcp/releases/tag/v0.1.0
@@ -0,0 +1,73 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our community a
6
+ harassment-free experience for everyone, regardless of age, body size, visible or
7
+ invisible disability, ethnicity, sex characteristics, gender identity and expression,
8
+ level of experience, education, socio-economic status, nationality, personal appearance,
9
+ race, religion, or sexual identity and orientation.
10
+
11
+ We pledge to act and interact in ways that contribute to an open, welcoming, diverse,
12
+ inclusive, and healthy community.
13
+
14
+ ## Our Standards
15
+
16
+ Examples of behavior that contributes to a positive environment:
17
+
18
+ - Demonstrating empathy and kindness toward other people
19
+ - Being respectful of differing opinions, viewpoints, and experiences
20
+ - Giving and gracefully accepting constructive feedback
21
+ - Accepting responsibility and apologizing to those affected by our mistakes
22
+ - Focusing on what is best for the overall community
23
+
24
+ Examples of unacceptable behavior:
25
+
26
+ - The use of sexualized language or imagery, and sexual attention or advances of any kind
27
+ - Trolling, insulting or derogatory comments, and personal or political attacks
28
+ - Public or private harassment
29
+ - Publishing others' private information, such as a physical or email address, without
30
+ their explicit permission
31
+ - Other conduct which could reasonably be considered inappropriate in a professional
32
+ setting
33
+
34
+ ## Enforcement Responsibilities
35
+
36
+ Community leaders are responsible for clarifying and enforcing our standards of
37
+ acceptable behavior and will take appropriate and fair corrective action in response to
38
+ any behavior that they deem inappropriate, threatening, offensive, or harmful.
39
+
40
+ ## Scope
41
+
42
+ This Code of Conduct applies within all community spaces, and also applies when an
43
+ individual is officially representing the community in public spaces.
44
+
45
+ ## Enforcement
46
+
47
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to
48
+ the community leaders responsible for enforcement at **logeshkumar.dev@gmail.com**. All
49
+ complaints will be reviewed and investigated promptly and fairly.
50
+
51
+ All community leaders are obligated to respect the privacy and security of the reporter
52
+ of any incident.
53
+
54
+ ## Enforcement Guidelines
55
+
56
+ Community leaders will follow these Community Impact Guidelines in determining the
57
+ consequences for any action they deem in violation of this Code of Conduct:
58
+
59
+ 1. **Correction** — A private, written warning, providing clarity around the nature of
60
+ the violation and an explanation of why the behavior was inappropriate.
61
+ 2. **Warning** — A warning with consequences for continued behavior.
62
+ 3. **Temporary Ban** — A temporary ban from any sort of interaction or public
63
+ communication with the community for a specified period of time.
64
+ 4. **Permanent Ban** — A permanent ban from any sort of public interaction within the
65
+ community.
66
+
67
+ ## Attribution
68
+
69
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1,
70
+ available at
71
+ https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
72
+
73
+ [homepage]: https://www.contributor-covenant.org
@@ -0,0 +1,81 @@
1
+ # Contributing to Postman MCP
2
+
3
+ Thanks for taking the time to contribute. Postman MCP is an open-source MCP server
4
+ that syncs API code into Postman collections. This guide gets you from a fresh clone to
5
+ a green test run and a clean pull request.
6
+
7
+ ## Code of Conduct
8
+
9
+ This project follows the [Contributor Covenant](CODE_OF_CONDUCT.md). By participating you
10
+ agree to uphold it. Report unacceptable behavior to the address listed there.
11
+
12
+ ## Ways to contribute
13
+
14
+ - **Report a bug** — open a [bug report](https://github.com/logesh-works/postman-mcp/issues/new?template=bug_report.yml).
15
+ - **Request a feature** — open a [feature request](https://github.com/logesh-works/postman-mcp/issues/new?template=feature_request.yml).
16
+ - **Improve docs** — everything under `docs/` is fair game; small fixes can go straight to a PR.
17
+ - **Add framework coverage** — new or better parsers under `postman_mcp/input/parsers/`.
18
+ - **Write tests** — coverage gaps are tracked in [ROADMAP.md](ROADMAP.md) and issues.
19
+
20
+ ## Development setup
21
+
22
+ Requires **Python ≥ 3.10** and `git` on your PATH.
23
+
24
+ ```bash
25
+ git clone https://github.com/logesh-works/postman-mcp
26
+ cd postman-mcp
27
+
28
+ python -m venv .venv
29
+ # Windows (PowerShell): .venv\Scripts\Activate.ps1
30
+ # macOS / Linux: source .venv/bin/activate
31
+
32
+ pip install -e ".[dev]"
33
+ ```
34
+
35
+ This installs the package in editable mode plus the dev tools (`pytest`, `pytest-cov`,
36
+ `respx`). After install, `postman-mcp version` should print the current version.
37
+
38
+ ## Running the checks
39
+
40
+ ```bash
41
+ pytest # run the test suite
42
+ pytest --cov # with coverage (target: >80%)
43
+ ```
44
+
45
+ All tests mock the Postman REST API via `respx` — **no real Postman API key is needed**
46
+ and no network calls are made. Never commit a real API key or a populated
47
+ `postman-mcp.json` / `.postman-mcp.secret`.
48
+
49
+ ## Architecture in one paragraph
50
+
51
+ The five sync commands are **one engine plus five selectors**. The engine
52
+ (`engine/builder.py`) turns a normalized `RouteModel` into a Postman Collection v2.1
53
+ item. The input resolver (`input/resolver.py`) produces that `RouteModel` from the best
54
+ available source — an OpenAPI spec when one exists, framework code parsing otherwise.
55
+ The service layer (`service/`) orchestrates read → diff → confirm → write against the
56
+ Postman client (`postman/`). See [docs/architecture/overview.md](docs/architecture/overview.md)
57
+ for the full picture.
58
+
59
+ ## Pull request guidelines
60
+
61
+ 1. **Branch** from `main`: `git checkout -b fix/short-description`.
62
+ 2. **Keep PRs focused** — one logical change. Unrelated cleanups go in their own PR.
63
+ 3. **Add tests** for any behavior change. Bug fixes should include a regression test.
64
+ 4. **Update docs** when you change a command, flag, or config field.
65
+ 5. **Update [CHANGELOG.md](CHANGELOG.md)** under the `## [Unreleased]` heading.
66
+ 6. **Match the surrounding style** — the code favors small, single-responsibility modules
67
+ and comments that explain the *why*, not the *what*.
68
+ 7. Fill out the PR template; link the issue your PR closes.
69
+
70
+ A maintainer will review. CI must be green before merge.
71
+
72
+ ## Commit messages
73
+
74
+ Use clear, present-tense summaries (`Add NestJS guard detection`, not `added stuff`).
75
+ Reference issues with `Fixes #123` where applicable. Conventional Commits prefixes
76
+ (`feat:`, `fix:`, `docs:`, `test:`, `refactor:`) are welcome but not required.
77
+
78
+ ## Reporting security issues
79
+
80
+ **Do not** open a public issue for security vulnerabilities. Follow
81
+ [SECURITY.md](SECURITY.md).
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Logesh Kumar (logeshkumar.in)
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.