diff --git a/ocs-provider/index.php b/ocs-provider/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..316b39cace8abc4dd38a3ef6c66137382cce3e52
--- /dev/null
+++ b/ocs-provider/index.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+require_once('../lib/base.php');
+require_once(__DIR__ . '/provider.php');
+
+header('Content-Type: application/json');
+
+$server = \OC::$server;
+
+$controller = new Provider(
+	'ocs_provider',
+	$server->getRequest(),
+	$server->getAppManager()
+);
+echo $controller->buildProviderList()->render();
diff --git a/ocs-provider/provider.php b/ocs-provider/provider.php
new file mode 100644
index 0000000000000000000000000000000000000000..04da7402c9826acb3064bf3adc41c9ea69577780
--- /dev/null
+++ b/ocs-provider/provider.php
@@ -0,0 +1,92 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+class Provider extends \OCP\AppFramework\Controller {
+	/** @var \OCP\App\IAppManager */
+	private $appManager;
+
+	/**
+	 * @param string $appName
+	 * @param \OCP\IRequest $request
+	 * @param \OCP\App\IAppManager $appManager
+	 */
+	public function __construct($appName,
+								\OCP\IRequest $request,
+								\OCP\App\IAppManager $appManager) {
+		parent::__construct($appName, $request);
+		$this->appManager = $appManager;
+	}
+
+	/**
+	 * @return \OCP\AppFramework\Http\JSONResponse
+	 */
+	public function buildProviderList() {
+		$services = [
+			'version' => 2,
+			'PRIVATE_DATA' => [
+				'version' => 1,
+				'endpoints' => [
+					'store' => '/ocs/v1.php/privatedata/setattribute',
+					'read' => '/ocs/v1.php/privatedata/getattribute',
+					'delete' => '/ocs/v1.php/privatedata/deleteattribute',
+				],
+			],
+		];
+
+		if($this->appManager->isEnabledForUser('files_sharing')) {
+			$services['SHARING'] = [
+				'version' => 1,
+				'endpoints' => [
+					'share' => '/ocs/v1.php/apps/files_sharing/api/v1/shares',
+				],
+			];
+			$services['FEDERATED_SHARING'] = [
+				'version' => 1,
+				'endpoints' => [
+					'share' => '/ocs/v1.php/cloud/shares',
+					'webdav' => '/public.php/webdav/',
+				],
+			];
+		}
+
+		if($this->appManager->isEnabledForUser('activity')) {
+			$services['ACTIVITY'] = [
+				'version' => 1,
+				'endpoints' => [
+					'list' => '/ocs/v1.php/cloud/activity',
+				],
+			];
+		}
+
+		if($this->appManager->isEnabledForUser('provisioning_api')) {
+			$services['PROVISIONING'] = [
+				'version' => 1,
+				'endpoints' => [
+					'user' => '/ocs/v1.php/cloud/users',
+					'groups' => '/ocs/v1.php/cloud/groups',
+					'apps' => '/ocs/v1.php/cloud/apps',
+				],
+			];
+		}
+
+		return new \OCP\AppFramework\Http\JSONResponse($services);
+	}
+}
\ No newline at end of file
diff --git a/tests/ocs-provider/provider.php b/tests/ocs-provider/provider.php
new file mode 100644
index 0000000000000000000000000000000000000000..34bd6067588b4e6a7716552340793f7d4c24df96
--- /dev/null
+++ b/tests/ocs-provider/provider.php
@@ -0,0 +1,170 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+class OcsProviderTest extends \Test\TestCase {
+	/** @var \OCP\IRequest */
+	private $request;
+	/** @var \OCP\App\IAppManager */
+	private $appManager;
+	/** @var Provider */
+	private $ocsProvider;
+
+	public function setUp() {
+		parent::setUp();
+
+		require_once '../ocs-provider/provider.php';
+
+		$this->request = $this->getMockBuilder('\\OCP\\IRequest')->getMock();
+		$this->appManager = $this->getMockBuilder('\\OCP\\App\\IAppManager')->getMock();
+		$this->ocsProvider = new Provider('ocs_provider', $this->request, $this->appManager);
+	}
+
+	public function testBuildProviderListWithoutAnythingEnabled() {
+		$this->appManager
+			->expects($this->at(0))
+			->method('isEnabledForUser')
+			->with('files_sharing')
+			->will($this->returnValue(false));
+		$this->appManager
+			->expects($this->at(1))
+			->method('isEnabledForUser')
+			->with('activity')
+			->will($this->returnValue(false));
+		$this->appManager
+			->expects($this->at(2))
+			->method('isEnabledForUser')
+			->with('provisioning_api')
+			->will($this->returnValue(false));
+
+		$expected = new \OCP\AppFramework\Http\JSONResponse(
+			[
+				'version' => 2,
+				'PRIVATE_DATA' => [
+					'version' => 1,
+					'endpoints' => [
+						'store' => '/ocs/v1.php/privatedata/setattribute',
+						'read' => '/ocs/v1.php/privatedata/getattribute',
+						'delete' => '/ocs/v1.php/privatedata/deleteattribute',
+					],
+				],
+			]
+		);
+
+		$this->assertEquals($expected, $this->ocsProvider->buildProviderList());
+	}
+
+	public function testBuildProviderListWithSharingEnabled() {
+		$this->appManager
+			->expects($this->at(0))
+			->method('isEnabledForUser')
+			->with('files_sharing')
+			->will($this->returnValue(true));
+		$this->appManager
+			->expects($this->at(1))
+			->method('isEnabledForUser')
+			->with('activity')
+			->will($this->returnValue(false));
+		$this->appManager
+			->expects($this->at(2))
+			->method('isEnabledForUser')
+			->with('provisioning_api')
+			->will($this->returnValue(false));
+
+		$expected = new \OCP\AppFramework\Http\JSONResponse(
+			[
+				'version' => 2,
+				'PRIVATE_DATA' => [
+					'version' => 1,
+					'endpoints' => [
+						'store' => '/ocs/v1.php/privatedata/setattribute',
+						'read' => '/ocs/v1.php/privatedata/getattribute',
+						'delete' => '/ocs/v1.php/privatedata/deleteattribute',
+					],
+				],
+				'FEDERATED_SHARING' => [
+					'version' => 1,
+					'endpoints' => [
+						'share' => '/ocs/v1.php/cloud/shares',
+						'webdav' => '/public.php/webdav/',
+					],
+				],
+				'SHARING' => [
+					'version' => 1,
+					'endpoints' => [
+						'share' => '/ocs/v1.php/apps/files_sharing/api/v1/shares',
+					],
+				],
+			]
+		);
+
+		$this->assertEquals($expected, $this->ocsProvider->buildProviderList());
+	}
+
+	public function testBuildProviderListWithEverythingEnabled() {
+		$this->appManager
+			->expects($this->any())
+			->method('isEnabledForUser')
+			->will($this->returnValue(true));
+
+		$expected = new \OCP\AppFramework\Http\JSONResponse(
+			[
+				'version' => 2,
+				'PRIVATE_DATA' => [
+					'version' => 1,
+					'endpoints' => [
+						'store' => '/ocs/v1.php/privatedata/setattribute',
+						'read' => '/ocs/v1.php/privatedata/getattribute',
+						'delete' => '/ocs/v1.php/privatedata/deleteattribute',
+					],
+				],
+				'FEDERATED_SHARING' => [
+					'version' => 1,
+					'endpoints' => [
+						'share' => '/ocs/v1.php/cloud/shares',
+						'webdav' => '/public.php/webdav/',
+					],
+				],
+				'SHARING' => [
+					'version' => 1,
+					'endpoints' => [
+						'share' => '/ocs/v1.php/apps/files_sharing/api/v1/shares',
+					],
+				],
+				'ACTIVITY' => [
+					'version' => 1,
+					'endpoints' => [
+						'list' => '/ocs/v1.php/cloud/activity',
+					],
+				],
+				'PROVISIONING' => [
+					'version' => 1,
+					'endpoints' => [
+						'user' => '/ocs/v1.php/cloud/users',
+						'groups' => '/ocs/v1.php/cloud/groups',
+						'apps' => '/ocs/v1.php/cloud/apps',
+					],
+				],
+			]
+		);
+
+		$this->assertEquals($expected, $this->ocsProvider->buildProviderList());
+	}
+}
diff --git a/tests/phpunit-autotest.xml b/tests/phpunit-autotest.xml
index 2bf3ca3cf9de53af5c9b2ef83ff740f9db2c5bc3..499c69bc9d1d6621103ce23cb8f0ac36cada4aec 100644
--- a/tests/phpunit-autotest.xml
+++ b/tests/phpunit-autotest.xml
@@ -10,6 +10,7 @@
 		<directory suffix='.php'>lib/</directory>
 		<directory suffix='.php'>settings/</directory>
 		<directory suffix='.php'>core/</directory>
+		<directory suffix='.php'>ocs-provider/</directory>
 		<file>apps.php</file>
 	</testsuite>
 	<!-- filters for code coverage -->
diff --git a/tests/phpunit.xml.dist b/tests/phpunit.xml.dist
index 346c8f5f9c98822a458721b41afc6218c38bebca..19fa38209a9ff0592aed3c197d4a63f64e60a871 100644
--- a/tests/phpunit.xml.dist
+++ b/tests/phpunit.xml.dist
@@ -4,6 +4,7 @@
 		<directory suffix='.php'>lib/</directory>
 		<directory suffix='.php'>settings/</directory>
 		<directory suffix='.php'>core/</directory>
+		<directory suffix='.php'>ocs-provider/</directory>
 		<file>apps.php</file>
 	</testsuite>
 	<!-- filters for code coverage -->