golf-mcp 0.2.12__tar.gz → 0.2.13__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.

Potentially problematic release.


This version of golf-mcp might be problematic. Click here for more details.

Files changed (59) hide show
  1. {golf_mcp-0.2.12/src/golf_mcp.egg-info → golf_mcp-0.2.13}/PKG-INFO +1 -1
  2. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/pyproject.toml +2 -2
  3. golf_mcp-0.2.13/src/golf/__init__.py +1 -0
  4. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/builder.py +112 -0
  5. {golf_mcp-0.2.12 → golf_mcp-0.2.13/src/golf_mcp.egg-info}/PKG-INFO +1 -1
  6. golf_mcp-0.2.12/src/golf/__init__.py +0 -1
  7. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/LICENSE +0 -0
  8. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/MANIFEST.in +0 -0
  9. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/README.md +0 -0
  10. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/setup.cfg +0 -0
  11. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/auth/__init__.py +0 -0
  12. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/auth/api_key.py +0 -0
  13. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/auth/factory.py +0 -0
  14. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/auth/helpers.py +0 -0
  15. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/auth/providers.py +0 -0
  16. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/auth/registry.py +0 -0
  17. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/cli/__init__.py +0 -0
  18. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/cli/branding.py +0 -0
  19. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/cli/main.py +0 -0
  20. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/commands/__init__.py +0 -0
  21. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/commands/build.py +0 -0
  22. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/commands/init.py +0 -0
  23. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/commands/run.py +0 -0
  24. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/__init__.py +0 -0
  25. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/builder_auth.py +0 -0
  26. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/builder_metrics.py +0 -0
  27. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/builder_telemetry.py +0 -0
  28. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/config.py +0 -0
  29. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/parser.py +0 -0
  30. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/telemetry.py +0 -0
  31. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/core/transformer.py +0 -0
  32. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/__init__.py +0 -0
  33. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/.env.example +0 -0
  34. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/README.md +0 -0
  35. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/auth.py +0 -0
  36. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/golf.json +0 -0
  37. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/prompts/welcome.py +0 -0
  38. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/resources/current_time.py +0 -0
  39. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/resources/info.py +0 -0
  40. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/resources/weather/city.py +0 -0
  41. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/resources/weather/client.py +0 -0
  42. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/resources/weather/current.py +0 -0
  43. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/resources/weather/forecast.py +0 -0
  44. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/tools/calculator.py +0 -0
  45. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/examples/basic/tools/say/hello.py +0 -0
  46. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/metrics/__init__.py +0 -0
  47. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/metrics/collector.py +0 -0
  48. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/metrics/registry.py +0 -0
  49. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/telemetry/__init__.py +0 -0
  50. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/telemetry/instrumentation.py +0 -0
  51. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/utilities/__init__.py +0 -0
  52. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/utilities/context.py +0 -0
  53. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/utilities/elicitation.py +0 -0
  54. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf/utilities/sampling.py +0 -0
  55. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf_mcp.egg-info/SOURCES.txt +0 -0
  56. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf_mcp.egg-info/dependency_links.txt +0 -0
  57. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf_mcp.egg-info/entry_points.txt +0 -0
  58. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf_mcp.egg-info/requires.txt +0 -0
  59. {golf_mcp-0.2.12 → golf_mcp-0.2.13}/src/golf_mcp.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: golf-mcp
3
- Version: 0.2.12
3
+ Version: 0.2.13
4
4
  Summary: Framework for building MCP servers
5
5
  Author-email: Antoni Gmitruk <antoni@golf.dev>
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "golf-mcp"
7
- version = "0.2.12"
7
+ version = "0.2.13"
8
8
  description = "Framework for building MCP servers"
9
9
  authors = [
10
10
  {name = "Antoni Gmitruk", email = "antoni@golf.dev"}
@@ -66,7 +66,7 @@ golf = ["examples/**/*"]
66
66
 
67
67
  [tool.poetry]
68
68
  name = "golf-mcp"
69
- version = "0.2.12"
69
+ version = "0.2.13"
70
70
  description = "Framework for building MCP servers with zero boilerplate"
71
71
  authors = ["Antoni Gmitruk <antoni@golf.dev>"]
72
72
  license = "Apache-2.0"
@@ -0,0 +1 @@
1
+ __version__ = "0.2.13"
@@ -383,6 +383,22 @@ class CodeGenerator:
383
383
  console.print()
384
384
  console.print(get_status_text("success", f"Build completed successfully in {output_dir_display}"))
385
385
 
386
+ def _generate_root_file_imports(self) -> list[str]:
387
+ """Generate import statements for automatically discovered root files."""
388
+ root_file_imports = []
389
+ discovered_files = discover_root_files(self.project_path)
390
+
391
+ if discovered_files:
392
+ root_file_imports.append("# Import root-level Python files")
393
+
394
+ for filename in sorted(discovered_files.keys()):
395
+ module_name = Path(filename).stem # env.py -> env
396
+ root_file_imports.append(f"import {module_name}")
397
+
398
+ root_file_imports.append("") # Blank line
399
+
400
+ return root_file_imports
401
+
386
402
  def _create_directory_structure(self) -> None:
387
403
  """Create the output directory structure"""
388
404
  # Create main directories
@@ -810,6 +826,11 @@ class CodeGenerator:
810
826
  "",
811
827
  ]
812
828
 
829
+ # Add imports for root files
830
+ root_file_imports = self._generate_root_file_imports()
831
+ if root_file_imports:
832
+ imports.extend(root_file_imports)
833
+
813
834
  # Add auth imports if auth is configured
814
835
  if auth_components.get("has_auth"):
815
836
  imports.extend(auth_components["imports"])
@@ -1575,6 +1596,17 @@ def build_project(
1575
1596
  shutil.copy2(health_path, output_dir)
1576
1597
  console.print(get_status_text("success", "Health script copied to build directory"))
1577
1598
 
1599
+ # Copy any additional Python files from project root
1600
+ discovered_root_files = discover_root_files(project_path)
1601
+
1602
+ for filename, file_path in discovered_root_files.items():
1603
+ dest_path = output_dir / filename
1604
+ try:
1605
+ shutil.copy2(file_path, dest_path)
1606
+ console.print(get_status_text("success", f"Root file {filename} copied to build directory"))
1607
+ except (OSError, shutil.Error) as e:
1608
+ console.print(f"[red]Error copying {filename}: {e}[/red]")
1609
+
1578
1610
  # Create a simple README
1579
1611
  readme_content = f"""# {settings.name}
1580
1612
 
@@ -1674,6 +1706,86 @@ from golf.auth.providers import RemoteAuthConfig, JWTAuthConfig, StaticTokenConf
1674
1706
  )
1675
1707
 
1676
1708
 
1709
+ def discover_root_files(project_path: Path) -> dict[str, Path]:
1710
+ """Automatically discover all Python files in the project root directory.
1711
+
1712
+ This function finds all .py files in the project root, excluding:
1713
+ - Special Golf files (startup.py, health.py, readiness.py, auth.py, server.py)
1714
+ - Component directories (tools/, resources/, prompts/)
1715
+ - Hidden files and common exclusions (__pycache__, .git, etc.)
1716
+
1717
+ Args:
1718
+ project_path: Path to the project root directory
1719
+
1720
+ Returns:
1721
+ Dictionary mapping filenames to their full paths
1722
+ """
1723
+ import ast
1724
+
1725
+ discovered_files = {}
1726
+
1727
+ # Files that are handled specially by Golf and should not be auto-copied
1728
+ reserved_files = {
1729
+ "startup.py",
1730
+ "health.py",
1731
+ "readiness.py",
1732
+ "auth.py",
1733
+ "server.py",
1734
+ "pre_build.py", # Legacy auth file
1735
+ "golf.json",
1736
+ "golf.toml", # Config files
1737
+ "__init__.py", # Package files
1738
+ }
1739
+
1740
+ # Find all .py files in the project root (not in subdirectories)
1741
+ try:
1742
+ for file_path in project_path.iterdir():
1743
+ if not file_path.is_file():
1744
+ continue
1745
+
1746
+ filename = file_path.name
1747
+
1748
+ # Skip non-Python files
1749
+ if not filename.endswith(".py"):
1750
+ continue
1751
+
1752
+ # Skip reserved/special files
1753
+ if filename in reserved_files:
1754
+ continue
1755
+
1756
+ # Skip hidden files and temporary files
1757
+ if filename.startswith(".") or filename.startswith("_") or filename.endswith("~"):
1758
+ continue
1759
+
1760
+ # Validate it's a readable Python file
1761
+ try:
1762
+ with open(file_path, encoding="utf-8") as f:
1763
+ # Read first 200 chars to validate it's a proper Python file
1764
+ content = f.read(200)
1765
+
1766
+ # Basic Python syntax validation
1767
+ try:
1768
+ ast.parse(content + "\n# truncated for validation")
1769
+ except SyntaxError:
1770
+ # Still include files with syntax errors, but warn
1771
+ console.print(f"[yellow]Warning: {filename} has syntax issues but will be included[/yellow]")
1772
+
1773
+ except (OSError, UnicodeDecodeError) as e:
1774
+ console.print(f"[yellow]Warning: Cannot read {filename}, skipping: {e}[/yellow]")
1775
+ continue
1776
+
1777
+ discovered_files[filename] = file_path
1778
+
1779
+ except OSError as e:
1780
+ console.print(f"[yellow]Warning: Error scanning project directory: {e}[/yellow]")
1781
+
1782
+ if discovered_files:
1783
+ file_list = ", ".join(sorted(discovered_files.keys()))
1784
+ console.print(f"[dim]Found root Python files: {file_list}[/dim]")
1785
+
1786
+ return discovered_files
1787
+
1788
+
1677
1789
  # Legacy function removed - replaced by parse_shared_files in parser module
1678
1790
 
1679
1791
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: golf-mcp
3
- Version: 0.2.12
3
+ Version: 0.2.13
4
4
  Summary: Framework for building MCP servers
5
5
  Author-email: Antoni Gmitruk <antoni@golf.dev>
6
6
  License-Expression: Apache-2.0
@@ -1 +0,0 @@
1
- __version__ = "0.2.12"
File without changes
File without changes
File without changes
File without changes