diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 00000000..d32441db --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "docfx": { + "version": "2.78.3", + "commands": [ + "docfx" + ], + "rollForward": false + } + } +} \ No newline at end of file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..1f54981a --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,43 @@ +on: + release: + types: [published] + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + actions: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + publish-docs: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: .NET Setup + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.x + + - name: Generate documentation + run: make generate-docs + + - name: Upload Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: 'artifacts/_site' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 1dc1beb8..3fce6429 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,7 @@ _NCrunch_* nCrunchTemp_* *.orig + +# Auto-generated documentation +docs/_site +docs/api \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..c2a0a012 --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ +SOURCE_DIRECTORY := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) +ARTIFACT_PATH := $(SOURCE_DIRECTORY)artifacts +DOCS_PATH := $(SOURCE_DIRECTORY)docs +CONFIGURATION ?= Release + +clean: + dotnet clean + rm -rf $(ARTIFACT_PATH)/* + rm -rf $(DOCS_PATH)/api + +restore: + dotnet tool restore + dotnet restore + +build: restore + dotnet build --no-restore --configuration $(CONFIGURATION) + +test: build + dotnet test \ + --no-build \ + --configuration $(CONFIGURATION) \ + --filter '(Execution!=Manual)' \ + --blame \ + --diag "$(ARTIFACT_PATH)/diag.txt" \ + --logger "trx" \ + --collect "Code Coverage;Format=cobertura" \ + --results-directory $(ARTIFACT_PATH)/test-results \ + -- \ + RunConfiguration.CollectSourceInformation=true + +generate-docs: clean restore + dotnet build --no-restore --configuration Release + dotnet docfx $(DOCS_PATH)/docfx.json + +serve-docs: generate-docs + dotnet docfx serve $(ARTIFACT_PATH)/_site --port 8080 + +.DEFAULT_GOAL := build \ No newline at end of file diff --git a/docs/docfx.json b/docs/docfx.json new file mode 100644 index 00000000..6b4feb83 --- /dev/null +++ b/docs/docfx.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json", + "metadata": [ + { + "src": [ + { + "src": "../src", + "files": [ + "**/*.csproj" + ] + } + ], + "output": "api" + } + ], + "build": { + "content": [ + { + "files": [ + "**/*.{md,yml}" + ], + "exclude": [ + "_site/**" + ] + } + ], + "resource": [ + { + "files": [ + "images/**" + ] + } + ], + "output": "../artifacts/_site", + "template": [ + "default", + "modern" + ], + "globalMetadata": { + "_appName": "MCP C# SDK", + "_appTitle": "MCP C# SDK", + "_appLogoPath": "images/mcp.svg", + "_appFaviconPath": "images/favicon.ico", + "_enableSearch": true, + "pdf": false + } + } +} \ No newline at end of file diff --git a/docs/images/favicon.ico b/docs/images/favicon.ico new file mode 100644 index 00000000..7b23c7bb Binary files /dev/null and b/docs/images/favicon.ico differ diff --git a/docs/images/mcp.svg b/docs/images/mcp.svg new file mode 100644 index 00000000..b39ecafd --- /dev/null +++ b/docs/images/mcp.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..facf2093 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,23 @@ +--- +_layout: landing +--- + +# Overview + +The official C# SDK for the [Model Context Protocol](https://modelcontextprotocol.io/), enabling .NET applications, services, and libraries to implement and interact with MCP clients and servers. Please visit our [API documentation](https://modelcontextprotocol.github.io/csharp-sdk/api/ModelContextProtocol.html) for more details on available functionality. + +## About MCP + +The Model Context Protocol (MCP) is an open protocol that standardizes how applications provide context to Large Language Models (LLMs). It enables secure integration between LLMs and various data sources and tools. + +For more information about MCP: + +- [Official Documentation](https://modelcontextprotocol.io/) +- [Protocol Specification](https://spec.modelcontextprotocol.io/) +- [GitHub Organization](https://github.com/modelcontextprotocol) + +For how-to guides, tutorials, and additional guidance, refer to the [official MCP documentation](https://modelcontextprotocol.io/). + +## License + +This project is licensed under the [MIT License](https://github.com/modelcontextprotocol/csharp-sdk/blob/main/LICENSE). diff --git a/docs/toc.yml b/docs/toc.yml new file mode 100644 index 00000000..f63a0134 --- /dev/null +++ b/docs/toc.yml @@ -0,0 +1,5 @@ +items: +- name: API Docs + href: api/ModelContextProtocol.yml +- name: Github + href: https://github.com/ModelContextProtocol/csharp-sdk \ No newline at end of file