semvec/pypi-packages huggingface dataset:
pdf2md-mcp 0.1.1
MCP server for converting PDF files to Markdown using AI sampling
License: MIT
Requires Python: >=3.10
Keywords: mcp, pdf, markdown, conversion, ai

# PDF2MD MCP Server

An MCP (Model Context Protocol) server that converts PDF files to Markdown format using AI sampling capabilities.

## Features

- Convert PDF files to Markdown using AI content extraction
- Support for both local file paths and URLs
- Incremental conversion - resume from where you left off
- Configurable output directory
- Built with FastMCP for high performance

## Installation

```bash
pip install pdf2md-mcp
```

## Usage

### As an MCP Server

Start the server:

```bash
pdf2md-mcp
```

The server will expose MCP tools for PDF to Markdown conversion.

### Available Tools

#### `convert_pdf_to_markdown`

Converts a PDF file to Markdown format using AI sampling.

**Parameters:**
- `file_path` (string): Local file path or URL to the PDF file
- `output_dir` (string, optional): Output directory for the markdown file. Defaults to the same directory as input file (for local files) or current working directory (for URLs)

**Returns:**
- `output_file`: Path to the generated markdown file
- `summary`: Summary of the conversion task
- `pages_processed`: Number of pages processed

## Requirements

- Python 3.10+
- An MCP-compatible client with AI sampling capabilities
- Network access for URL-based PDF files

## Development

### Setup

```bash
git clone https://github.com/shuminghuang/pdf2md-mcp.git
cd pdf2md-mcp
pip install -e ".[dev]"
```

### Running Tests

```bash
pytest
```

### Code Formatting

```bash
black .
isort .
```

## License

MIT License - see LICENSE file for details.

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.
Obfuscratchor 2.8
A simple obfuscation tool for Scratch.
License: MIT

# Obfuscratchor: A simple obfuscation tool for Scratch.  
[Open the online obfuscation website](https://obfuscratchor.onrender.com/)  
**WARNING: Some Scratch projects may not work properly after obfuscation! The file size of the obfuscated Scratch project will be larger!**  
example usage:  
```python
# Sample program to use the Obfuscratchor module
from Obfuscratchor import obfuscate

def main():
    # Input and output file names
    infile = 'test/Project.sb3'  # Replace with your Scratch project file
    outfile = 'test/Project(obfuscated).sb3'

    # Options for renaming
    options = {
        'rename_variables': {
            'rename_variables_to': 'random_hex',  # Rename variables to random hex values
            'variables_name_length': 8  # Length of the new names
        },
        'rename_lists': {
            'rename_lists_to': 'random_unicode_char_range',  # Rename lists to random unicode characters
            'lists_name_length': 10,  # Length of the new names
            'range_start': 0x4E00,  # Unicode range start (CJK Unified Ideographs)
            'range_end': 0x9FFF   # Unicode range end (CJK Unified Ideographs)
        },
        'rename_sprites': {
            'rename_sprites_to': 'random_hex',  # Rename sprites to random hex values
            'sprites_name_length': 6  # Length of the new names
        },
        'rename_costumes': {
            'rename_costumes_to': 'random_hex',  # Rename costumes to random hex values
            'costumes_name_length': 6
        },
        'rename_sounds': {
            'rename_sounds_to': 'random_unicode_char_range',  # Rename sounds to random unicode characters
            'sounds_name_length': 8,
            'range_start': 0xE000,  # Unicode Private Use Area start
            'range_end': 0xF8FF   # Unicode Private Use Area end
        },
        'rename_backdrops': {
            'rename_backdrops_to': 'random_hex',  # Rename backdrops to random hex values
            'backdrops_name_length': 6
        },
        'rename_my_blocks': {
            'rename_my_blocks_to': 'random_unicode_char_range',  # Rename my blocks to random unicode characters
            'my_blocks_name_length': 8,
            'range_start': 0xE000,  # Unicode Private Use Area start
            'range_end': 0xF8FF   # Unicode Private Use Area end
        },
        'rename_arguments_for_my_blocks': {
            'rename_arguments_for_my_blocks_to': 'random_hex',  # Rename arguments for my blocks to random hex values
            'arguments_for_my_blocks_name_length': 20
        }
        'convert_integers_to_hexadecimal': True,  # Convert integers to hexadecimal
    }

    try:
        # Call the obfuscate function
        elapsed_time = obfuscate(infile, outfile, options)
        print(f'Obfuscation completed in {elapsed_time:.2f} seconds.')
    except Exception as e:
        print(f'An error occurred:')
        raise

if __name__ == '__main__':
    main()

```